如何使用eclipse和bndtools将jar转换为OSGi包

时间:2012-03-22 09:04:19

标签: java eclipse osgi bnd

我正在寻找一个循序渐进的指南,使用eclipse bndtools插件将jar转换为OSGi包。我知道可以使用命令行使用bnd来完成它,但很高兴知道如何通过IDE执行相同操作。

我可能会遗漏一些东西,但this tutorial只解释了如何从头开始创建项目。

3 个答案:

答案 0 :(得分:24)

按照文章Create Eclipse plugins (OSGi bundles) from standard jar来实现这一目标。 虽然这种方法不使用Bnd,但您可以实现您想要的效果。

简而言之,您可以执行以下操作:

  1. 通过选择File-> New -> Project...-> Plug-in Development -> "Plug-in from Existing JAR Archives"

  2. 创建一个新的插件项目
  3. 在此新插件(包)中选择要包含的jar。输入其他插件数据(名称,版本,ID等)。

  4. 取消选中标记Unzip the JAR archive into the project。然后按完成。
  5. 取消选中复选框Unzip the JAR archive into the project,阻止从Jar中提取通常不必要的类文件。

    编辑: 导出捆绑包以将其安装到OSGi运行时中。选择您的捆绑包,然后选择File -> Export -> Plug-in Development -> "Deployable plug-ins and fragment"

    取消选中导出来源复选框。

答案 1 :(得分:10)

  1. 只需在bndtools中为要转换的所有(或相关)jar创建一个新项目。
  2. 为此项目指定一个名称,该名称将是转换后的jar的包符号名称的前缀。例如。如果您的公司是极致,请致电项目'com.acme'
  3. 下载jar目录中的jar和源
  4. 使用-classpath条目(File / New / Bundle Descriptor)创建新的包描述符,例如:
  5. -classpath: jar/htmlcleaner-2.2.jar, jar/htmlcleaner-2.2-src.zip

    Export-Package: org.htmlcleaner.*;version=1.0

    Import-Package: org.apache.tools.ant;resolution:=optional,\

    org.jdom;resolution:=optional,\

    *

    Bundle-Version: 2.2.1

    保存此文件后,查看生成的目录,瞧,有你的捆绑!您可以为要包装的任意数量的包重用相同的项目。

    然后,您可以将捆绑包发布到其中一个存储库。选择bnd.bnd文件,然后使用上下文菜单选择Release Bundle。


    编辑:NB 您无法直接使用其他项目中的“wrap”项目,因为Eclipse需要源树才能工作。有两种解决方法:

    • 将捆绑的包装放入存储库并从那里使用(如上所述)
    • 在项目的src文件夹中解压缩源树

    https://github.com/bndtools/bndtools/wiki/How-to-Wrap-Bundles

答案 2 :(得分:1)

除了现有的答案之外,您可能对此blog post感兴趣,它解释了如何从具有“纯maven”的jar创建该OSGi包,即无需特定的IDE和/或插件。 (确切地说,在真正的工作之下,它再次变得更好;))