【问题标题】:apache ivy and nested jar files in osgi bundlesosgi 包中的 apache ivy 和嵌套 jar 文件
【发布时间】:2014-04-08 20:49:32
【问题描述】:

我们有以下使用 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

谢谢

【问题讨论】:

    标签: java ant osgi bundle ivy


    【解决方案1】:

    你不能这样做。 javac 编译器根本不理解嵌套在 JAR 中的 JAR。这是 OSGi 框架的运行时特性。

    要针对这些 API 进行构建,您必须提取内部 JAR 并将其放入构建时类路径中。但是,您仍然可以在运行时按照您想要的方式使用嵌套 JAR。

    【讨论】:

    • 谢谢。会这样做:)
    猜你喜欢
    • 2011-11-13
    • 2013-06-30
    • 1970-01-01
    • 2016-11-21
    • 2016-08-13
    • 2013-12-14
    • 2015-05-22
    • 2012-09-09
    • 2022-01-17
    相关资源
    最近更新 更多