7

我正在开发一个项目,它是集成项目,我们正在使用 Apache Camel 和 Apache Karaf。在项目中,我需要使用Jira REST Java 客户端库。

所以我已经阅读了很多关于如何将非 OSGI 库包装到 OSGI 包的各种文章和线程,但我真的不确定我是否做对了。

所以,我创建了一个 POM 文件,它依赖于所需的库。做了一个包,尝试部署到 Karaf,当然,Karaf 抱怨缺少包。

所以,我找到了相应的 maven 依赖项,添加了它,包进入<Import-Package>和依赖项进入<Embed-Dependency>.

另一轮,部署,查找依赖项,添加,......一次又一次,直到 Karaf 对捆绑包很好。

这真的正确吗?在我看来这很疯狂,所以我想我没有像往常一样得到它:)

最后,我的工作计算机上的包稳定了,我快速检查并回家,在那里我继续但是,奇怪的是,相同的 POM / 包,在我的个人计算机上编译不工作,再次抱怨缺少包,但是这一次,这个包肯定在 POM 文件中,并且肯定是嵌入到包中的,我可以在那里看到它。

这次丢失的包是 org.apache.commons.codec。

org.osgi.framework.BundleException: Unresolved constraint in bundle jiraclient.bundle [134]: Unable to     resolve 134.0: missing requirement [134.0] osgi.wiring.package; (osgi.wiring.package=org.apache.commons.codec)
    at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3826)[org.apache.felix.framework-4.0.3.jar:]
    at org.apache.felix.framework.Felix.startBundle(Felix.java:1868)[org.apache.felix.framework-4.0.3.jar:]
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:944)[org.apache.felix.framework-4.0.3.jar:]
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1247)[6:org.apache.felix.fileinstall:3.2.6]
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1219)[6:org.apache.felix.fileinstall:3.2.6]
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.startAllBundles(DirectoryWatcher.java:1208)[6:org.apache.felix.fileinstall:3.2.6]
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:503)[6:org.apache.felix.fileinstall:3.2.6]
    at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:291)[6:org.apache.felix.fileinstall:3.2.6]

所以,现在我很困惑,怎么了:(

很漂亮,伙计们,帮帮我。谢谢!

POM 文件很长,所以我想链接更好: http: //pastebin.com/j5cmWveG

4

1 回答 1

9

是的,就其部署模型而言,OSGi 恕我直言“远非易于使用”,需要 100% 捆绑 MANIFEST.MF 文件中的 osgi 元数据。你需要数学博士学位才​​能理解 BND 工具。不幸的是,许多 JAR 不是 OSGi 包。

查看包含所有导入|导出的 pom.xml 文件,以及“不容易理解”的语法,任何普通工程师只需要 5 秒即可理解“某些东西是写在丹麦州的”;例如OSGi!=我们生活的世界。恕我直言,这必须而且应该更容易。

您可以使用wrap url 处理程序 在 Karaf 中安装普通 JAR :http: //karaf.apache.org/manual/latest/developers-guide/creating-bundles.html

另一个技巧是创建一个uber JAR,例如将它全部放在一个 JAR 文件中,然后您可以部署它。

还有FAB(Fuse Bundles),它使 OSGi 部署更容易,因为它在部署时为您处理了大部分这种疯狂,而不是您必须处理 OSGi MANIFEST.MF 的疯狂:http ://www.davsclaus.com /2012/08/osgi-deployment-made-easy-with-fab.html

于 2012-10-26T06:46:52.857 回答