Maven 如何去图书馆

Maven 如何去图书馆,maven,osgi,apache-camel,bnd,Maven,Osgi,Apache Camel,Bnd,我正在做一个项目,它是一个集成项目,我们正在使用ApacheCamel和ApacheKaraf。 在项目中,我需要使用 所以我已经阅读了很多关于如何将非OSGI库包装到OSGI包的文章和帖子,但我真的不确定我是否做对了 因此,我创建了一个POM文件,它依赖于所需的库。制作了一个包并试图将其部署到卡拉夫,当然,卡拉夫抱怨丢失了包 所以,我找到了相应的maven依赖项,添加了它,包进入,依赖项进入 另一轮,部署,查找依赖项,添加。。。一次又一次,直到Karaf对包裹满意为止 这是真的吗?在我看来,这

我正在做一个项目,它是一个集成项目,我们正在使用ApacheCamel和ApacheKaraf。 在项目中,我需要使用

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

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

所以,我找到了相应的maven依赖项,添加了它,包进入
,依赖项进入

另一轮,部署,查找依赖项,添加。。。一次又一次,直到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文件很长,所以我想链接更好:

是的,就部署模型而言,OSGi“远不容易使用”,需要在MANIFEST.MF文件中100%包含OSGi元数据的捆绑包。而且你需要数学博士才能理解BND工具。不幸的是,许多JAR不是OSGi捆绑包


查看您的pom.xml文件和所有导入导出,以及“不容易理解”的语法,任何普通工程师只需5秒钟就可以理解“某些东西在丹麦州被扭曲了”;例如OSGi!=我们生活的世界。这必须而且应该更容易

您可以使用wrapurl处理程序在Karaf中安装普通JAR:

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


还有FAB(保险丝束)这使得OSGi部署更容易,因为它在部署时为您处理了很多这种疯狂的事情,而不是您必须处理OSGi MANIFEST.MF madness:

并且在安装捆绑包之前,您是否已在Karaf中安装commons codec?异常告诉您需要导入一个找不到的包。是的,在m Felix应该更好地向最终用户解释它的含义。你好,克劳斯,很高兴再次见到你(顺便说一句,感谢《骆驼行动》一书:)。“已安装的通用编解码器”是什么意思?在我的Karaf Instance中,似乎至少安装并激活了捆绑包:karaf@root>bundle:list | grep codec[246][Installed][[]][[80]mvn:commons codec/commons codec/1.2够了吗?这个包是否公开了所需的类?我想有一种方法可以找到捆绑包导出,但我现在不知道:(顺便说一句,我在库捆绑包中嵌入了commons编解码器包,为什么它不工作?也许捆绑包必须明确导出“org.apache.commons.codec”所以嵌入式jira rest库可以在同一个包中使用它?这有意义吗?我在这里很健谈,无论如何……我尝试将Karaf抱怨的这些包添加到包中,Karaf对包感到满意,或者至少日志中没有错误。现在有另一个问题,对我来说是全新的,那就是:java.la引起的ng.ClassFormatError:在类文件javax/ws/rs/core/UriBuilder中,方法中缺少非本机或抽象的代码属性。:DYou还可以尝试在捆绑包中使用dynamic import*。这可以在Felix捆绑包插件上配置。*这也必须而且应该更容易!