我正在构建一个RCP4应用程序。
我有两个名为a.jar和b.jar的非osgi罐子。两个罐子都有很多非osgi依赖。 a.jar的一个依赖是b.jar。层次结构如下所示:
My application
|--a.jar
|----aDependency1.jar
|----aDependency2.jar
|----aDependencyN.jar
|----b.jar
|------bDependency1.jar
|------bDependency2.jar
|------bDependencyN.jar
某些bDependencyN.jars是aDependencyN.jars的不同版本 (例如commons-logging-1.0.4.jar vs commons-logging-1.1.2.jar)
我需要直接从我的RCP4应用程序引用a.jar和b.jar。换句话说,当我编写代码时,我将从a.jar和b.jar导入包
哪种方法最好:
通过命令行使用bnd 2.4将所有非osgi jar转换为osgi jar。然后我通过目标文件
创建一个新项目“来自现有JAR存档的插件”,并选择a.jar及其所有依赖项,并将其导出为名为a.with.libs.jar的“可部署插件和片段”。我对b.jar做同样的事情并创建b.with.libs.jar。然后我通过目标文件
创建一个新项目“来自现有JAR存档的插件”,并选择a.jar及其所有依赖项,以及b.jar及其所有依赖项,并将其导出为“可部署的插件和片段” “叫做ab.with.libs.jar。然后我通过目标文件
是否有比上述建议更好的方法?
答案 0 :(得分:0)
一种选择是使用bnd-platform(我也是作者)来管理第三方依赖项并从中创建OSGi包。您可以将它与从Maven存储库和本地JAR中检索到的两个依赖项一起使用(请参阅README)。配置Maven依赖项时,它还将包含传递依赖项。在引擎盖下它使用bnd。如果需要,您还可以自定义Jars的包装方式。 bnd-platform 是Gradle的插件,您可以轻松地从this template开始 - 只需添加您的依赖项并提供项目README(捆绑符号名称,版本)中所述的配置并运行gradlew bundles
。然后可以将创建的包添加到目标平台。您还可以使用 bnd-platform 构建p2存储库/更新站点。