2014-03-06 31 views
2

我們有以下使用OSGi包的情景:apache的常春藤和嵌套的jar文件在OSGi包

BundleA進口包「com.mypackage」。

BundleB導出包「com.mypackage」,但該包來自添加到BundleB類路徑的嵌套JAR文件。

爲了編譯OSGi包並自動解析它們的依賴關係,我使用了ANT + IVY。

我配置了一個ivy:buildobr任務,它正確地構建了OBR文件(手動檢查)。

接下來我配置了實際的構建任務。

  1. 致電常春藤:解決。我可以清楚地看到IVY正確地解析了包「com.mypackage」。
  2. 調用ivy:創建編譯類路徑的cachepath。
  3. 與classpathref = 「compile.classpath」

的javac調用的javac拋出錯誤,因爲它不知道包 「com.mypackage」。它只知道指示JAR文件的類路徑,並不知道如何用它自己的類路徑解釋MANIFEST.MF。

問題出在構造類路徑上。它不知道從BundleB中嵌套的JAR導出的「com.mypackage」。

你如何解決這類問題?

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: BundleA 
Bundle-SymbolicName: BundleA 
Bundle-Version: 1.0.0.qualifier 
Bundle-RequiredExecutionEnvironment: JavaSE-1.6 
Import-Package: com.mypackage, 
org.osgi.framework;version="1.3.0" 
Bundle-ClassPath: . 


Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: BundleB 
Bundle-SymbolicName: BundleB 
Bundle-Version: 1.0.0.qualifier 
Bundle-RequiredExecutionEnvironment: JavaSE-1.6 
Import-Package: org.osgi.framework;version="1.3.0" 
Export-Package: com.mypackage 
Bundle-ClassPath: ., 
nestedJarContainingComMypackage.jar 

感謝

回答

5

你不能做到這一點。 javac編譯器根本不理解嵌套在JAR中的JAR。這是OSGi框架的運行時功能。

要構建這些API,您必須將內部JAR拉出並放到構建時類路徑中。不過,您仍然可以在運行時使用嵌套的JAR。

+0

謝謝。將這樣做:) – smiron