BndTools,如何添加非OSGi JAR?使用普通JAR会破坏整个项目。缺少要求布线包

时间:2017-12-04 11:15:53

标签: java osgi bndtools

我正在研究这个基于BndTools的OSGi项目:https://github.com/Jafre13/ISS-Product

我的项目需要一个非基于OSGi的库(aliasi-lingpipe - https://mvnrepository.com/artifact/de.julielab/aliasi-lingpipe/4.1.0)。

这就是问题出现的地方。首先,我尝试直接从Maven存储库添加JAR,因为BndTools应该与Maven存储库兼容,但它似乎不适用于“存储库浏览器”。即使按照http://bnd.bndtools.org/plugins/maven.html中的说明将Maven Central插件添加到build.bnd文件中,仍会产生相同的结果。

放弃使用Maven,我尝试以最简洁的方式进行操作并自行下载JAR并将其添加为此处指定的普通JAR:http://bndtools.org/faq.html(6如何依赖于普通JAR文件在构建时间?)

这次JAR得到了认可,我可以在代码中开始使用它了。但是一旦你启动OSGi框架,一切都会崩溃,因为它试图解决非OSGi类路径,导致这样的接线错误:

  

无法解析捆绑包:[slf4j.api-1.7.25   org.osgi.framework.BundleException:无法解析slf4j.api [6](R   6.0):缺少要求[slf4j.api [6](R 6.0)] osgi.wiring.package; (&(osgi.wiring.package = org.slf4j.impl)(版本> = 1.6.0))未解决   要求:[[slf4j.api [6](R 6.0)] osgi.wiring.package;   (&(osgi.wiring.package = org.slf4j.impl)(版本> = 1.6.0))],   dk.sdu.sso.sred-0.0.0.201712041036 org.osgi.framework.BundleException:   无法解析dk.sdu.sso.sred [7](R 7.0):缺少要求   [dk.sdu.sso.sred [7](R 7.0)] osgi.wiring.package;   (osgi.wiring.package = com.aliasi.classify)未解决的要求:   [[dk.sdu.sso.sred [7](R 7.0)] osgi.wiring.package;   (osgi.wiring.package = com.aliasi.classify)]]

所以此时我完全被阻止了,无法继续。我希望有一些OSGi经验的人可以在这里提供帮助。

问候和感谢。

1 个答案:

答案 0 :(得分:4)

通过在构建时添加jar,您可以编译但不能运行。

在构建期间,bnd将看到您需要jar中的包并为其创建Import-Package语句。因此,在此状态下,您需要部署导出包的包。事实上,这意味着您必须从jar中创建一个包。

另一个选择是将jar嵌入到您自己的包中。这可以通过将您需要的软件包添加为私有软件包来完成。然后Bnd将自动嵌入这些。如果jar真的只在内部使用,这种方法很有效。