【问题标题】:OSGI bundle exception, maven dependency issueOSGI bundle 异常,maven 依赖问题
【发布时间】:2013-01-12 22:54:32
【问题描述】:

我对 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)

解决此问题的任何建议或指示。

【问题讨论】:

    标签: java maven osgi apache-felix


    【解决方案1】:

    有没有导出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>
    

    【讨论】:

    • 感谢您对问题的回答
    【解决方案2】:

    一切似乎都如预期的那样。您已配置 sap-ws-netcom 捆绑 pom 以声明需要 javax.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 包可用,那么它就不存在。

    【讨论】:

      【解决方案3】:

      我在 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

      “注意:

      此工作流程适用于 Adob​​e CQ;但是,您可能会遇到 以下异常:

      引起:java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl 在 org.apache.sling.commons.classloader.impl.ClassLoaderFacade.loadClass(ClassLoaderFacade.java:127) 在 java.lang.ClassLoader.loadClass(Unknown Source) 在 javax.xml.ws.spi.FactoryFinder.safeLoadClass(未知来源)... 107 更多的 解决方案:要解决此问题并确保您可以创建一个 如本文所述使用 Web 服务的捆绑包,请修改 sling.properties 文件位于 crx-quickstart\conf 文件夹中。 将以下代码行添加到该文件中: sling.bootdelegation.com.sun=com.sun.*。然后重新启动服务器。一次 您执行此任务,您可以跟随本文。”

      【讨论】:

        【解决方案4】:

        如果您运行的是 Windows,请尝试将其放在 C:\G\ 或更短的路径名中。它为我解决了问题!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-21
          • 2012-04-20
          • 2011-09-12
          • 2013-02-01
          • 1970-01-01
          • 2018-09-20
          • 2013-09-23
          • 1970-01-01
          相关资源
          最近更新 更多