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

Rob*_*ski 2 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 存储库兼容,但它似乎不适用于“存储库浏览器”。即使将 Maven Central 插件添加到http://bnd.bndtools.org/plugins/maven.html 中所述的 build.bnd 文件,仍然会产生相同的结果。

放弃让 Maven 工作,我尝试以最简洁的方式来做,自己下载 JAR 并将其添加为此处指定的普通 JAR:http : //bndtools.org/faq.html(6 How Can I Depend on a构建时的普通 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)(version>=1.6.0)) 未解决的需求:[[slf4j.api [6](R 6.0)] osgi.wiring.package; (&(osgi.wiring.package=org.slf4j.impl)(version>=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 经验的人可以在这里提供帮助。

问候和感谢。

Chr*_*der 5

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

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

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