如何将库打包为eclipse插件供其他插件使用

时间:2012-04-01 18:36:33

标签: java eclipse osgi eclipse-plugin

我正在尝试构建一个依赖于必须与其分离的库的Eclipse插件。原因是:

  1. 这是一个商业图书馆,而插件将自由发布。此外,大多数人不需要它,我们也不想混淆用户。
  2. 目前至少有两个版本的库正在使用中,我们不想构建两个不同版本的插件。该界面兼容,因此我们只能发布一个版本的插件。
  3. 该插件适用于基于Eclipse的开发环境,目的是在该环境中提供我们库的功能。库本身依赖于其他免费组件,我可以毫不费力地将它捆绑在一起。

    因为我不知道我是否被允许确切地说出它是哪个库,但是我必须保持这个明确的,让我们称库“L”和插件我正在尝试开发“P”。< / p>

    我正在使用bnd工具,到目前为止,我已尝试将L打包为独立插件,并作为插件片段。

    作为一个独立的插件,它被主机eclipse环境接受,我可以将它列为P的依赖并成功构建它。但是,在运行时,P插件没有在其类路径上看到L库中的资源。主要是那些需要META-INF /服务的人。

    接下来,我尝试将L打包为P的插件片段。我希望这可行,因为规范说,片段的类路径与其主机插件合并。这不起作用,因为我无法使用L中的类作为P的构建依赖项 - 在eclipse的插件目录中放置L并不会导致它被识别为已安装的插件。

    所以我被困住了。我需要L's jar作为P运行时的一部分并构建类路径,同时将它们放在一个单独的插件中。我正在努力做甚么可能吗?

4 个答案:

答案 0 :(得分:2)

为了让P能够看到L'资源,L必须将包含的文件夹导出为'packages',P必须导入它们。这看起来有点不雅,但允许像META-INF / services这样的文件夹在P的类路径上。

或者,对于META-INF /服务,您可以查看ServiceLoaders领域的Enterprise OSGi规范的第5版中的新功能。解释这个想法的好博客是http://coderthoughts.blogspot.co.uk/2011/08/javautilserviceloader-in-osgi.html,Apache Aries有一个early implementation

答案 1 :(得分:1)

其他插件的Eclipse插件依赖项可以定义为Optional。如果用户没有,您可以使用Class.forName检查是否已加载依赖类。

答案 2 :(得分:0)

显然你没有将'library'插件列为'main'插件的OSGI导入。没有看到你的清单就无法确定。

答案 3 :(得分:0)

根据我的理解,您希望将Jar添加为插件依赖项。 最好的方法转到插件视图 - &gt;将jar文件复制到插件目录 - &gt;将其作为工作区中的源项目导入。 Plugin.xml - &gt;依赖选项卡 - &gt;将其添加为依赖项。

如果要将其打包在插件中,请使用动态库加载机制。