【发布时间】:2014-04-08 20:49:32
【问题描述】:
我们有以下使用 OSGi 包的场景:
BundleA 导入包“com.mypackage”。
BundleB 导出包“com.mypackage”,但该包来自添加到 BundleB 类路径的嵌套 JAR 文件。
为了编译 OSGi 包并自动解决它们的依赖关系,我使用了 ANT + IVY。
我配置了一个 ivy:buildobr 任务,它正确地构建了 OBR 文件(手动检查)。
接下来我配置了实际的构建任务。
- 呼叫常春藤:解决。我可以清楚地看到 IVY 正确解析了包“com.mypackage”。
- 调用 ivy:cachepath 创建编译类路径。
- 用 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
谢谢
【问题讨论】: