如何OSGIfy库(How to OSGIfy a library)

2019-08-01 23:05发布

我工作的一个项目,它的集成项目中,我们使用Apache的骆驼和Apache Karaf。 在项目中,我需要使用吉拉REST Java客户端库。

所以,我读过不少各种文章和关于如何包装非OSGI库OSGi包线程,但我真的不知道,如果我是正确的。

所以,我创建了一个依赖于所需要的库中的POM文件。 制成的包装,并试图将其部署到Karaf,当然,Karaf抱怨缺少的软件包。

于是,我找到相应的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]

所以,现在我完全糊涂了,什么是错的:(

拜托,伙计们,帮帮我。 谢谢!

该POM文件是漫长的,所以我想链路更好: http://pastebin.com/j5cmWveG

Answer 1:

是OSGi是恕我直言“远远易于使用的”在其部署模型而言,需要在MANIFEST.MF文件中的OSGi元数据100个%包。 而你需要的数学博士,了解BND工具。 而不幸的是很多的JAR不是OSGi包。

纵观所有进口的pom.xml文件|出口,而且“不容易理解”的语法,只不过那是5秒,平均任何工程师了解,这种“东西是在丹麦的状态wrotten”; 如OSGi的!=我们生活的世界,这必须和应该更容易恕我直言。

您可以使用包装 URL处理Karaf安装普通JAR: http://karaf.apache.org/manual/latest/developers-guide/creating-bundles.html

另一个技巧是创建一个超级JAR,比如把它在一个单一的JAR文件,然后你可以部署。

还有FAB(保险丝包),这使得OSGi的部署更容易,因为它处理很多这种疯狂的为你在部署时,而不是你不必处理OSGi的MANIFEST.MF疯狂: http://www.davsclaus.com /2012/08/osgi-deployment-made-easy-with-fab.html



文章来源: How to OSGIfy a library