BndTools,如何添加非 OSGi JAR?使用普通 JAR 会破坏整个项目。缺少要求的接线包
BndTools, How to add a non-OSGi JAR? Using plain JAR breaks the whole project. Missing requirement wiring package
我正在处理这个基于 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 存储库兼容,但它似乎不适用于 "Repository Browser"。即使按照 http://bnd.bndtools.org/plugins/maven.html 中所述将 Maven Central 插件添加到 build.bnd 文件,仍然会产生相同的结果。
放弃让 Maven 工作,我尝试以最简朴的方式做到这一点并自己下载 JAR 并将其添加为此处指定的普通 JAR:http://bndtools.org/faq.html(6 我如何依赖一个普通的构建时的 JAR 文件?)
这次 JAR 得到了识别,我可以开始在代码中使用它了。但是一旦你启动 OSGi 框架,一切都会再次崩溃,因为它试图解析非 OSGi class 路径,导致这样的接线错误:
could not resolve the bundles: [slf4j.api-1.7.25
org.osgi.framework.BundleException: Unable to resolve slf4j.api [6](R
6.0): missing requirement [slf4j.api [6](R 6.0)] osgi.wiring.package; (&(osgi.wiring.package=org.slf4j.impl)(version>=1.6.0)) Unresolved
requirements: [[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:
Unable to resolve dk.sdu.sso.sred [7](R 7.0): missing requirement
[dk.sdu.sso.sred [7](R 7.0)] osgi.wiring.package;
(osgi.wiring.package=com.aliasi.classify) Unresolved requirements:
[[dk.sdu.sso.sred [7](R 7.0)] osgi.wiring.package;
(osgi.wiring.package=com.aliasi.classify)] ]
所以在这一点上我完全受阻,无法继续。我希望有一些 OSGi 经验的人可以在这里提供帮助。
问候和感谢。
通过在构建时添加 jar,您可以编译但不能 运行。
在构建过程中,bnd 会发现您需要 jar 中的包并为其创建 Import-Package 语句。因此,在这种状态下,您需要部署一个导出包的包。事实上,这意味着您必须从 jar 中创建一个包。
另一种选择是将 jar 嵌入到您自己的包中。这可以通过将您需要的包添加为私有包来完成。然后 Bnd 会自动嵌入这些。如果 jar 真的只在内部使用,这种方法很有效。
我正在处理这个基于 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 存储库兼容,但它似乎不适用于 "Repository Browser"。即使按照 http://bnd.bndtools.org/plugins/maven.html 中所述将 Maven Central 插件添加到 build.bnd 文件,仍然会产生相同的结果。
放弃让 Maven 工作,我尝试以最简朴的方式做到这一点并自己下载 JAR 并将其添加为此处指定的普通 JAR:http://bndtools.org/faq.html(6 我如何依赖一个普通的构建时的 JAR 文件?)
这次 JAR 得到了识别,我可以开始在代码中使用它了。但是一旦你启动 OSGi 框架,一切都会再次崩溃,因为它试图解析非 OSGi class 路径,导致这样的接线错误:
could not resolve the bundles: [slf4j.api-1.7.25 org.osgi.framework.BundleException: Unable to resolve slf4j.api [6](R 6.0): missing requirement [slf4j.api [6](R 6.0)] osgi.wiring.package; (&(osgi.wiring.package=org.slf4j.impl)(version>=1.6.0)) Unresolved requirements: [[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: Unable to resolve dk.sdu.sso.sred [7](R 7.0): missing requirement [dk.sdu.sso.sred [7](R 7.0)] osgi.wiring.package; (osgi.wiring.package=com.aliasi.classify) Unresolved requirements: [[dk.sdu.sso.sred [7](R 7.0)] osgi.wiring.package; (osgi.wiring.package=com.aliasi.classify)] ]
所以在这一点上我完全受阻,无法继续。我希望有一些 OSGi 经验的人可以在这里提供帮助。
问候和感谢。
通过在构建时添加 jar,您可以编译但不能 运行。
在构建过程中,bnd 会发现您需要 jar 中的包并为其创建 Import-Package 语句。因此,在这种状态下,您需要部署一个导出包的包。事实上,这意味着您必须从 jar 中创建一个包。
另一种选择是将 jar 嵌入到您自己的包中。这可以通过将您需要的包添加为私有包来完成。然后 Bnd 会自动嵌入这些。如果 jar 真的只在内部使用,这种方法很有效。