2

我目前正在为 karaf 开发捆绑包并且有一些问题......

我写了一个基于 cxf 的包/webservice,我尝试在 karaf 中部署它,但它无法启动该包,因为它无法解析某些包,例如

org.osgi.framework.BundleException:捆绑包org.springframework.aop [56]中未​​解决的约束:无法解决56.0:缺少要求[56.0]包;(&(package=org.aopalliance.aop)(version>=1.0.0)(!(version>=2.0.0)))

所以这里有一个问题,这个包依赖来自spring-aop(3.1.0.RELEASE),那么问题出在哪里呢?缺少什么依赖?我该如何解决这些问题?

在那种情况下,我并没有清楚地了解开发过程。我应该在部署中部署所有丢失的捆绑包吗?因为我想让第三方库与我开发的包分开。我必须部署哪些捆绑包?这是一个反复试验的过程吗?有没有一种通用的方法可以让 maven 做依赖项?

我发现了一个文件夹“系统”并在文档上读到它是一个像 maven 这样的存储库,是为了功能吗?

对于测试用例,我有一个带有一些预部署包的 karaf,并将我的 web 服务包放入其中,但再次出现异常......

引起:java.lang.ClassNotFoundException: javax.servlet.http.HttpServlet

缺少什么依赖?

我已经阅读了关于骆驼和卡拉夫的教程,但它没有解释部署的东西,所以有人能推荐我一个好的教程吗?

谢谢!克里斯

4

2 回答 2

7

简短的回答

向下滚动到引用“camel-cxf”的位置并运行两个命令 features:addurl 和 features:install。我有一种感觉,这将解决你所有的问题。


spring-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 不能满足这一点。


部署/安装

您可以将捆绑包放入 ${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

这将为您提供一个码头网络容器,并可以解决您的 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 手册。始终注意信息可能已过时

于 2012-03-02T13:08:15.247 回答
-1

请发布您的 MANIFEST.MF 文件。我认为您没有提到 maven-bundle-plugin 依赖项中的标签。

于 2014-01-01T06:47:49.980 回答