将现有JAR转换为OSGi-bundle

时间:2015-04-07 14:48:16

标签: java intellij-idea osgi osgi-bundle

我有一个需要转换为OSGi包的JAR文件。 我没有JAR文件的原始源代码。

我尝试使用以下答案:How to create OSGi bundle from jar library?

然而,它们已经过时了。

编辑:我需要转换几个,但需要固定数量的罐子。

4 个答案:

答案 0 :(得分:8)

选项1 - 在期望频繁添加/更新Jars时,或者当您可以从Maven存储库检索依赖项时,使用 bnd-platform 构建您的OSGi包 p>

我们使用bnd-platform(我也是作者)来管理第三方依赖项并从中创建OSGi包。您可以将它与从Maven存储库和本地JAR中检索到的两个依赖项一起使用(请参阅README)。如果您经常添加或更新您的依赖项,我建议您尝试 bnd-platform 。它是Gradle的插件,您可以轻松地从this template开始 - 只需添加您的Jar文件并提供项目README(捆绑符号名称,版本)中所述的配置并运行gradlew bundles

选项2 - 使用 bnd 构建您的OSGi捆绑包,一旦执行或添加/更新很少

如果您只进行一次或很少这样的过程,从现有Jar创建OSGi包的简单方法是直接使用bnd on the command line。你唯一需要的是Java和bnd jar。您可以使用wrap尝试自动换行jar或使用instructions for bnd创建.bnd文件(例如,仅导出特定的包)。

示例.bnd文件:

-classpath: lib/trove-2.0.4.jar
-output: gnu.trove-2.0.4.jar
Export-Package: *;-split-package:=merge-last;-noimport:=true
Import-Package: *
Bundle-Version: 2.0.4
Bundle-Name: GNU Trove Collections Plug-in
Bundle-SymbolicName: gnu.trove

示例电话:

java -jar <path to bnd>.jar trove-2.0.4.bnd

不再直接通过网站提供bnd Jar下载,download it from Maven Central是一个很好的选择。

答案 1 :(得分:2)

Eclipse Bundle Recipe项目提供了一种基于Maven的方法,用于将OSGi元数据添加到从Maven存储库中使用的JAR中。尽管名称不使用Eclipse。

它的核心是bnd tool。这个工具就像一把瑞士军刀。它分析jar和类文件并正确计算包导入和导出。你应该使用bnd自己转换专有的罐子。这是available in Maven Central

答案 2 :(得分:2)

如果您正在使用Maven,那么您可以使用Maven Bundle插件在OSGi包中内联或嵌入依赖项:

http://felix.apache.org/documentation/subprojects/apache-felix-maven-bundle-plugin-bnd.html#embedding-dependencies

答案 3 :(得分:0)

或者只是使用osgi:install with wrap选项,如下所示。

osgi:install wrap:file:/u01/repository/com/oracle/ojdbc6/11.2.0/ojdbc6-11.2.0.jar

这会将jar文件部署为bundle,你可以在“$ fuse_home / data / cache / bundle {id} /version0.0”文件夹下获取该包。