我正在做一个项目,它是集成项目,我们正在使用Apache Camel和Apache Karaf。在项目中,我需要使用Jira REST Java client library.
因此,我读了很多关于如何将非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
发布于 2012-10-26 14:46:53
是的,就其部署模型而言,OSGi“远不容易使用”,它需要在MANIFEST.MF文件中100%捆绑OSGi元数据。你需要一个数学上的PhD来理解BND工具。不幸的是,许多JAR不是OSGi包。
查看包含所有导入|导出的pom.xml文件,以及那些“不容易理解”的语法,对于任何普通工程师来说,只需要5秒就能理解这是“丹麦国家写的东西”;例如OSGi !=我们生活的世界。这必须而且应该是更容易的。
您可以使用包装 url处理程序在Karaf中安装一个普通的JAR:http://karaf.apache.org/manual/latest/developers-guide/creating-bundles.html
另一个技巧是创建一个uber JAR,例如将其全部放入一个JAR文件中,然后您就可以部署它了。
还有FAB (融合捆绑包),它使OSGi部署变得更容易,因为它在部署时为您处理了大部分疯狂的事情,而不是您必须处理OSGi MANIFEST.MF的疯狂:http://www.davsclaus.com/2012/08/osgi-deployment-made-easy-with-fab.html
https://stackoverflow.com/questions/13077141
复制相似问题