[英]How to include a jar of dependency in an OSGi bundle using maven bundle plugin?
[英]OSGI bundle exception, maven dependency issue
我对OSGI,Felix和Maven东西还很陌生,只是从它开始。 我正在通过jenkins部署Java构建,并且遇到以下依赖问题。
以下是包含依赖项的pom文件内容,我不确定它是否正确,但仍然会抱怨。
它正在寻找“ javax.jws”,版本在2.0和3.0之间
javax.jws;version>="2.0.0",!javax.jws;version>="3.0.0"
以下是pom的内容。
<Import-Package>!sun.misc,!org.apache.avalon.framework.logger,
!org.ietf.jgss,!org.apache.log,!org.apache.log.format,!org.apache.log.output.io,!com.werken.xpath,!org.apache.tools.ant,!org.apache.tools.ant.taskdefs,
!org.jdom,!org.jdom.input,!org.jdom.output,com.mblox.ngp.sal*;
version="${sal-utils-version}",org.apache.commons.logging;version="1.1",
javax.jws;version>="2.0.0",!javax.jws;version>="3.0.0",
com.sun.xml.ws.api.message,*
</Import-Package>
以下是我得到的例外:
[#|2013-01-29 11:07:44,109|ERROR|NGP-SAL-SALBootstrap-SAL-0|com.mblox.ngp.sal.platform.impl.Sal|172.18.36.38|slodev-rhatf4.mblox.com|sal-1|Unresolved constraint in bundle sap-ws-netcom [24]: Un
able to resolve 24.0: missing requirement [24.0] package; (&(package=javax.jws)(version>=2.0.0)(version>=2.0.0)(!(version>=3.0.0))) - [24.0] package; (&(package=javax.jws)(version>=2.0.0)(versi
on>=2.0.0)(!(version>=3.0.0)))|#]
org.osgi.framework.BundleException: Unresolved constraint in bundle sap-ws-netcom [24]: Unable to resolve 24.0: missing requirement [24.0] package; (&(package=javax.jws)(version>=2.0.0)(version
>=2.0.0)(!(version>=3.0.0))) - [24.0] package; (&(package=javax.jws)(version>=2.0.0)(version>=2.0.0)(!(version>=3.0.0)))
at org.apache.felix.framework.Felix.resolveBundle(Felix.java:3421)
at org.apache.felix.framework.Felix.startBundle(Felix.java:1754)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:905)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:892)
at com.mblox.ngp.sal.platform.impl.Sal.installBundle(Sal.java:608)
at com.mblox.ngp.sal.platform.impl.Sal.getBundle(Sal.java:481)
at com.mblox.ngp.sal.platform.impl.Sal.installSap(Sal.java:630)
at com.mblox.ngp.sal.platform.impl.Sal.initSapBundles(Sal.java:545)
at com.mblox.ngp.sal.platform.impl.Sal.start(Sal.java:290)
at com.mblox.ngp.sal.platform.impl.SALBootstrap.call(SALBootstrap.java:64)
at com.mblox.ngp.sal.platform.impl.SALBootstrap.call(SALBootstrap.java:24)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
解决此问题的任何建议或指示。
是否有任何捆绑包可以导出javax.jws
包? 如果没有,您可以将此Maven依赖项添加到您的构建中,并确保将其部署到Felix:
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-ws-metadata_2.0_spec</artifactId>
<version>1.1.2</version>
</dependency>
一切似乎都符合预期。 您已经配置了sap-ws-netcom
捆绑软件pom来声明需要j avax.jws
软件包。 并且容器在尝试解决依赖关系时会尝试找到它。
org.osgi.framework.BundleException: Unresolved constraint in bundle sap-ws-netcom [24]: Unable to resolve 24.0: missing requirement [24.0] package; (&(package=javax.jws)(version>=2.0.0)(version
>=2.0.0)(!(version>=3.0.0))) - [24.0] package; (&(package=javax.jws)(version>=2.0.0)(version>=2.0.0)(!(version>=3.0.0)))
at org.apache.felix.framework.Felix.resolveBundle(Felix.java:3421)
at org.apache.felix.framework.Felix.startBundle(Felix.java:1754)
问题很简单,OSGi容器没有javax.jws
可用,至少在您要求的版本中没有。 您是否认为已将其发布?
使它可用的方法是安装一个导出该软件包的捆绑包。 您必须自己做。 OSGi通常就是这种情况。 如果您没有明确地使Java包可用,那么它就不存在。
我在CQ5中使用Felix的javax.jws依赖项也有问题,解决方案(奇怪的是)在捆绑清单的Import-Package部分中明确不包括javax.jws和javax.jws.soap。 如果您使用的是maven-bundle-plugin(就我而言),则可以在说明中使用以下内容:
<plugin>
<groupid>org.apache.felix</groupid>
<artifactid>maven-bundle-plugin</artifactid>
<version>2.1.0</version>
<extensions>true</extensions>
<configuration>
<instructions>
<import-package>!javax.jws,!javax.jws.soap,*</import-package>
</instructions>
</configuration>
</plugin>
我也不需要单独的捆绑包来导出javax.jws和javax.jws.soap。 只需对我的具有Web服务客户端代码(由wsimport生成)的捆绑软件进行上述操作就足以使其正常工作。
我要做的另一件事是添加
sling.bootdelegation.com.sun=com.sun.*
到sling.properties文件。
关于创建Web服务的CQ5教程在此页面上进行了提及: http : //helpx.adobe.com/adobe-cq/using/creating-cq-bundles-consume-web.html
“注意:
此工作流程适用于Adobe CQ; 但是,您可能会遇到以下异常:
造成原因:java.lang.ClassNotFoundException:org.apache.sling.commons.classloader.impl.ClassLoaderFacade.loadClass(ClassLoaderFacade.java:127)处的com.sun.xml.internal.ws.spi.ProviderImpl。 javax.xml.ws.spi.FactoryFinder.safeLoadClass(Unknown Source)处的ClassLoader.loadClass(未知源)... 107其他解决方案:如要解决此问题并确保您可以按照本说明中所述创建使用Web服务的捆绑软件文章中,修改crx-quickstart \\ conf文件夹中的sling.properties文件。 将以下代码行添加到此文件:sling.bootdelegation.com.sun = com.sun。*。 然后重新启动服务器。 执行完此任务后,您可以阅读本文。”
如果您正在运行Windows,请尝试将其放在C:\\ G \\或更短的路径名中。 它为我解决了问题!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.