繁体   English   中英

osgi捆绑中的apache ivy和嵌套jar文件

[英]apache ivy and nested jar files in osgi bundles

我们有以下使用OSGi捆绑软件的方案:

BundleA导入包“ com.mypackage”。

BundleB导出软件包“ com.mypackage”,但该软件包来自添加到BundleB类路径的嵌套JAR文件。

为了编译OSGi捆绑包并自动解决它们的依赖性,我使用ANT + IVY。

我配置了一个ivy:buildobr任务,它可以正确构建OBR文件(手动检查)。

接下来,我配置了实际的构建任务。

  1. 打电话给ivy:resolve。 我可以清楚地看到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

谢谢

你做不到 javac编译器根本无法理解嵌套在JAR中的JAR。 这是OSGi框架的运行时功能。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM