首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >How to OSGIfy a library

How to OSGIfy a library
EN

Stack Overflow用户
提问于 2012-10-26 04:56:29
回答 1查看 3.1K关注 0票数 7

我正在做一个项目,它是集成项目,我们正在使用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。

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13077141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档