将现有JAR转换为OSGi-bundle

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

我尝试使用以下答案: 如何从jar库创建OSGi包?

但是,它们已经过时了。

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

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

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

选项2 – 使用bnd在您执行一次或添加/更新很少时构建您的OSGi包

如果您只进行一次或很少这样的过程,从现有Jar创建OSGi包的简单方法是直接在命令行上使用bnd 。 你唯一需要的是Java和bnd jar。 您可以使用wrap来尝试自动包装jar或创建带有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 .jar trove-2.0.4.bnd 

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

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

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

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

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

或者只使用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”文件夹下获得该包。