我目前正在为 karaf 开发 bundle 并有一些问题...
我写了一个基于 cxf 的 bundle/webservice,我尝试在 karaf 中部署它,但它无法启动那个 bundle,因为它无法解析某些包,例如
org.osgi.framework.BundleException: bundle org.springframework.aop [56] 中未解析的约束:无法解析 56.0:缺少 要求 [56.0] 包; (&(package=org.aopalliance.aop)(版本>=1.0.0)(!(版本>=2.0.0)))
那么这里有个问题,这个包依赖来自spring-aop(3.1.0.RELEASE),那么问题出在哪里呢?缺少什么依赖?我该如何解决这些问题?
那是我没有清楚地了解开发过程。我应该在部署中部署所有丢失的包吗?因为我想让第三方库从我开发的包中分离出来。我必须部署哪些 bundle ?这是一个反复试验的过程吗?有没有一种通用的方法让 maven 做依赖的事情?
我发现了一个文件夹“system”,并在 docu 上读到它是一个像 maven 一样的存储库,它是为了功能吗?
我有一个带有一些预部署包的 karaf 用于测试用例,并将我的 web 服务包放入其中,但再次出现异常...
引起:java.lang.ClassNotFoundException:javax.servlet.http.HttpServlet
缺少什么依赖项?
我已经阅读了有关 camel 和 karaf 的教程,但它没有解释部署的内容,所以有人能给我推荐一个好的教程吗?
谢谢! 克里斯
最佳答案
简答
向下滚动到引用“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 文件,列出了可以安装的 bundle 套件。对于部署大量 bundle 非常有用,它们可以安装到 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 手册。 时刻注意信息可能已过时
关于osgi - Karaf 发展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9414375/