2017-04-04 61 views
0

我正在构建RCP4应用程序。将非osgi jar添加到RCP4项目

我有两个非osgi罐子叫a.jar和b.jar。两个罐子都有很多非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 的(一个例子就是共享记录-1.0.4.jar VS共享记录-1.1.2 .jar)

我需要从我的RCP4应用程序直接引用a.jar和b.jar。换句话说,当我写的代码,我会从a.jar文件导入包和b.jar)

这是最好的办法:

  • 通过命令行使用BND 2.4把所有非osgi罐入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

一种选择是使用bnd-platform(我也撰文)从他们管理第三方的依赖,并创建OSGi包。您可以将它与从Maven存储库和本地Jars检索到的依赖关系一起使用(请参阅README)。当你配置Maven依赖项时,它也会包含传递依赖项。在引擎盖下它使用bnd。如果需要,您还可以自定义瓶子的包装方式。 bnd-platform是Gradle的插件,您可以轻松从this template开始 - 只需添加您的依赖关系并提供项目自述文件(软件包符号名称,版本)中所述的配置并运行gradlew bundles。然后可以将创建的捆绑包添加到目标平台。您还可以使用bnd-platform构建p2存储库/更新站点。

+0

嗨,感谢您的回复。我目前的项目不使用Maven,我以前从未使用过Gradle。 bnd-platform网站上的文档对我来说似乎有点高级,我不知道从哪里开始设置反映上述示例(所有本地jar)的正确gradle文件。 – ekjcfn3902039

+0

如果它都是本地Jars(而不是Maven依赖),那么bnd-platform会失去一些好处,因为它不能自动添加传递依赖。作为出发点,您可以使用上面提到的模板,从文档中您只需要本地依赖项部分添加Jars:https://github.com/stempler/bnd-platform#local-dependencies – stempler