如何OSGIfy图书馆

sti*_*ibi 7 osgi apache-camel maven bnd

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

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

所以,我创建了一个POM文件,它依赖于所需的库.制作了一个包并试图将它部署到卡拉夫,当然,卡拉夫抱怨丢失包裹.

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

另一轮,部署,找到依赖,添加,再次,再次,直到Karaf与捆绑很好.

这是真的正确吗?在我看来,我觉得很疯狂,所以我想我不会因为usualy :)

最后,包裹变得稳定在我的工作计算机上,我快速检查并回家了,我继续但是,奇怪的是,在我的个人计算机上编译的相同的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]
Run Code Online (Sandbox Code Playgroud)

所以,现在我完全糊涂了,出了什么问题:(

很高兴,伙计们,帮助我.谢谢!

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

Cla*_*sen 9

是的OSGi在部署模型方面恕我直言"远非易用",需要在MANIFEST.MF文件中100%捆绑osgi元数据.你需要一个数学博士来理解BND工具.不幸的是,许多JAR不是OSGi捆绑包.

查看包含所有导入|导出的pom.xml文件,以及"不易理解"的语法,任何普通工程师都需要花费5秒的时间才能理解这个"在丹麦的状态下有所改变"; 例如OSGi!=我们生活的世界.这必须而且应该更容易恕我直言.

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

另一个技巧是创建一个超级JAR,例如将它全部放在一个JAR文件中然后你可以部署它.

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