我想创建一个使用hibernate进行数据库事务的bundle。在转向休眠之前我使用普通的sql
。在camel.xml
中提到hibernate和相关配置之后,我尝试在ServiceMix中部署捆绑包。当我尝试使用start 525
启动此捆绑包时,收到一条错误消息:
Error executing command: Error executing command on bundles:
Error starting bundle 525: Unable to resolve my.package.artifactid [525](R 525.0): missing requirement [my.package.artifactid [525](R 525.0)] osgi.wiring.package; (osgi.wiring.package=javax.interceptor) Unresolved requirements: [[my.package.artifactid [525](R 525.0)] osgi.wiring.package; (osgi.wiring.package=javax.interceptor)]
这是针对javax.interceptor的。我将此包放在<Export-Package></Export-Package>
中的pom.xml
maven包felix插件中。这解决了问题,但后来为org.hibernate和其他包显示了相同的错误。
我的问题是,当我把它放在<Export-Package>
标签中时,我做到了吗?如果这是正确的,我必须继续为大量的包做这件事。有没有办法摆脱这种繁忙的程序?
如果我做错了,我该怎么做?
答案 0 :(得分:1)
是。你做错了。
missing requirement [my.package.artifactid [525](R 525.0)] osgi.wiring.package; (osgi.wiring.package=javax.interceptor)
该错误表明,包中需要包javax.interceptor(例如,包中的类通过引用它们直接使用包javax.interceptor中的类或通过使用任何框架(如hibernate)间接使用)没有它你的包不能加载引用的类。
现在,请按照以下步骤解决此问题。
构建捆绑包。检查捆绑包的生成的 manifest.mf文件。 import-package:header必须包含javax.interceptor包的条目。
现在,您需要确保javax.interceptor包由servicemix中的至少一个包导出。(选中these commands&amp; use webconsole以了解导出此包的包。 / p>
如果找不到导出此软件包的任何软件包,则需要添加此软件包。
您可以使用谷歌查找是否有任何导出此软件包的库,如this。确保,罐子是捆绑而不是普通罐子。
大多数情况下,maven中的传递依赖关系如果按原样部署到servicemix,就可以完成这项任务。
可能会发生这种情况,如果你部署一个导出javax.interceptor的jar,那么部署的jar可能依赖于其他jar。因此,请确保已部署的jar状态在Servicemix中显示为已启动。