我目前正在为karaf开发捆绑包并提出一些问题......
我写了一个基于cxf的bundle / webservice,我尝试在karaf中部署它,但它无法启动那个bundle,因为它无法解析某些包,例如。
org.osgi.framework.BundleException:bundle org.springframework.aop中未解决的约束[56]:无法解析56.0:缺失 要求[56.0]包; (及(包= org.aopalliance.aop)(版本> = 1.0.0)((版本>!= 2.0.0)))
所以这是一个问题,这个包依赖来自spring-aop(3.1.0.RELEASE),那么问题出在哪里?缺少什么依赖?我该如何解决这些问题?
在那种情况下,我并不清楚地了解开发过程。我应该在部署中部署所有丢失的捆绑包吗?因为我想保留第三方库,从我开发的捆绑包中取出。我必须部署哪些捆绑包?这是一个试错过程吗?有没有一种常见的方法让maven做依赖性的东西?
我发现了一个文件夹" system"并在文档中读取它是像maven这样的存储库,是否适用于这些功能?
我为测试用例提供了一些带有一些预先部署的捆绑包的karaf并将我的webservice捆绑到其中,但是再一次解释...
引起:java.lang.ClassNotFoundException:javax.servlet.http.HttpServlet
缺少什么依赖?
我已经阅读了有关camel和karaf的教程,但它没有解释部署内容,所以有人可以建议我一个很好的教程吗?
谢谢! 克里斯
答案 0 :(得分:7)
简短回答
向下滚动到指向“camel-cxf”的位并运行两个命令功能:addurl和features:install。我有一种感觉,这将解决你所有的问题。
<强>弹簧的AOP 强>
在Karaf控制台上输入:
exports | grep org.aopalliance.aop
我想你会看到如下行:
XX org.aopalliance.aop; version=3.1.0.RELEASE
因此,虽然spring-aop包具有正确的包,但它们是错误的版本,所请求的范围是> = 1.0.0且<2.0.0,因此3.1.0不满足该范围。 / p>
<强>部署/安装强>
您可以将捆绑包放入$ {karaf.home} / deploy或使用控制台。
您可以使用以下选项从Karaf控制台安装maven包:
install -s mvn:groupId/artifactId/version/packaging/classifier
-s
启动捆绑包,包装/分类器是可选的。
你可以在这里找到很多OSGi maven依赖项http://ebr.springsource.com/repository/app/ - 我快速看一下你的spring aop依赖很老了,你使用的是什么版本的CXF?
阅读有关Karaf功能的信息 - 它们基本上是XML文件,列出了可以安装的套件套件。对于部署大量捆绑包非常有用,它们可以安装到maven存储库中。
Karaf有一些标准功能,请尝试:
features:install war
这将为您提供一个jetty webcontainer并且可以解决您的ClassNotFoundException:javax.servlet.http.HttpServlet,只要它是正确的版本
Camel还有一个功能文件可能会对您的所有问题进行排序,请尝试以下方法:
features:addurl mvn:org.apache.camel.karaf/apache-camel/2.9.0/xml/features
features:install camel-cxf
<强>教程强>
有很多可用的,有些在http://karaf.apache.org和http://fusesource.com,但也可以看一下Karaf发行版中的PDF手册。 始终要注意信息可能已过时
答案 1 :(得分:-1)
请发布您的MANIFEST.MF文件。我想你并没有在maven-bundle-plugin依赖中提及标签。