我正在尝试构建一个依赖于必须与其分离的库的Eclipse插件。原因是:
该插件适用于基于Eclipse的开发环境,目的是在该环境中提供我们库的功能。库本身依赖于其他免费组件,我可以毫不费力地将它捆绑在一起。
因为我不知道我是否被允许确切地说出它是哪个库,但是我必须保持这个明确的,让我们称库“L”和插件我正在尝试开发“P”。< / p>
我正在使用bnd工具,到目前为止,我已尝试将L打包为独立插件,并作为插件片段。
作为一个独立的插件,它被主机eclipse环境接受,我可以将它列为P的依赖并成功构建它。但是,在运行时,P插件没有在其类路径上看到L库中的资源。主要是那些需要META-INF /服务的人。
接下来,我尝试将L打包为P的插件片段。我希望这可行,因为规范说,片段的类路径与其主机插件合并。这不起作用,因为我无法使用L中的类作为P的构建依赖项 - 在eclipse的插件目录中放置L并不会导致它被识别为已安装的插件。
所以我被困住了。我需要L's jar作为P运行时的一部分并构建类路径,同时将它们放在一个单独的插件中。我正在努力做甚么可能吗?
答案 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;将其添加为依赖项。
如果要将其打包在插件中,请使用动态库加载机制。