卡拉夫发展

时间:2012-02-23 13:52:19

标签: osgi apache-karaf

我目前正在为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的教程,但它没有解释部署内容,所以有人可以建议我一个很好的教程吗?

谢谢! 克里斯

2 个答案:

答案 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.orghttp://fusesource.com,但也可以看一下Karaf发行版中的PDF手册。 始终要注意信息可能已过时

答案 1 :(得分:-1)

请发布您的MANIFEST.MF文件。我想你并没有在maven-bundle-plugin依赖中提及标签。