当前位置: 首页 > 知识库问答 >
问题:

由于多个Joda-Time版本,Karaf无法解析依赖于ActiveMQ特性的包

乐正明辉
2023-03-14

我的捆绑包在 Joda-Time 2.x 上有一个 transative bundle 依赖项,并通过 Karaf (3.0.3) 功能文件进行部署。它部署得很好,直到我向activemq-broker(5.11.1)添加了依赖项,并与Karaf一起提供了activemq-camel功能。我的捆绑包现在无法解决,因为找到了两个指向包“org.joda.time”的路径。一个是我依赖的版本2.7,另一个是版本1.6,它是ActiveMQ功能的传递依赖项:

Chain 1:
  ch.vivates.ams.pep [152.9]
    import: (&(osgi.wiring.package=org.joda.time)(version>=2.7.0)(!(version>=3.0.0)))
     |
    export: osgi.wiring.package=org.joda.time
  joda-time [64.0]

Chain 2:
  ch.vivates.ams.pep [152.9]
    import: (osgi.wiring.package=org.apache.activemq)
     |
    export: osgi.wiring.package=org.apache.activemq; uses:=com.thoughtworks.xstream
  org.apache.activemq.activemq-osgi [108.0]
    import: (&(osgi.wiring.package=com.thoughtworks.xstream)(version>=1.4.0)(!(version>=2.0.0)))
     |
    export: osgi.wiring.package=com.thoughtworks.xstream; uses:=org.joda.time
  org.apache.servicemix.bundles.xstream [118.0]
    import: (&(osgi.wiring.package=org.joda.time)(version>=1.6.0)(!(version>=3.0.0)))
     |
    export: osgi.wiring.package=org.joda.time
  joda-time [117.0]

通过在安装功能之前显式启动Joda Time 2.7捆绑包,我可以成功安装功能:

bundle:install -s mvn:joda-time/joda-time/2.7

重新启动Karaf后,由于同样的原因,我的捆绑包无法启动,我首先必须刷新Joda-Time 2.7捆绑包。只有在那之后,我的捆绑包才会开始。

解决这些问题的“正确”方法是什么?尤其是重新启动卡拉夫的时候?我想我可以通过在自己的捆绑包中嵌入Joda Time的v2.7来解决这个问题,但这只是一个技巧。

目前,该功能如下所示:

<feature name="name" version="3.0.0-SNAPSHOT" description="description">
        <details>details</details>
        <feature>http</feature>
        <feature>http-whiteboard</feature>
        <feature version="5.11.1">activemq-broker-noweb</feature>
        <feature version="2.14.1">camel-core</feature>
        <feature version="2.14.1">camel-blueprint</feature>
        <feature version="2.14.1">camel-netty4-http</feature>
        <feature version="2.14.1">camel-http4</feature>
        <feature version="2.14.1">camel-jms</feature>
        <feature version="5.11.1">activemq-camel</feature>
        <bundle dependency="true">mvn:my.package/base/3.0.0-SNAPSHOT</bundle>
        <bundle>mvn:my.package/myBundle/3.0.0-SNAPSHOT</bundle>
        <bundle>mvn:joda-time/joda-time/2.7</bundle>
        <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.opensaml/2.6.1_3</bundle>
        <bundle>mvn:commons-lang/commons-lang/2.6</bundle>
        <bundle>wrap:mvn:org.owhtml" target="_blank">asp.esapi/esapi/2.0.1</bundle>
        <bundle>mvn:org.apache.santuario/xmlsec/1.5.6</bundle>
        <bundle>mvn:org.bouncycastle/bcprov-jdk15/1.46</bundle>
        <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-httpclient/3.1_7</bundle>
        <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-collections/3.2.1_3</bundle>
        <bundle>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.not-yet-commons-ssl/0.3.11_1</bundle>
        <bundle>mvn:org.codehaus.woodstox/woodstox-core-asl/4.4.1</bundle>
        <bundle>mvn:org.codehaus.woodstox/stax2-api/3.1.4</bundle>
        <bundle>mvn:org.herasaf.xacml.core/herasaf-xacml-core/1.0.0.RELEASE</bundle>
        <bundle>mvn:net.sf.ehcache/ehcache/2.9.0</bundle>
        <bundle>mvn:commons-codec/commons-codec/1.9</bundle>
        <bundle>mvn:commons-io/commons-io/2.4</bundle>
</feature>

编辑:

此问题描述了Camel Salesforce组件的相同问题。显然,这是通过将导入的版本范围扩大到[1.6,3)来解决的。ActiveMQ捆绑包应用相同的版本范围,但它仍然会产生问题。

共有1个答案

邵城
2023-03-14

上面的场景是Neil Bartlett在这篇博文中描述的问题的变体。由于我无法控制ActiveMQ的直接和传递依赖关系,我唯一能看到的选项是

  1. 降级我自己对Joda Time的依赖,以匹配xstream使用的版本。
  2. 在我自己的捆绑包中静态链接/嵌入Joda Time 2.7

我选择了选项2)。

 类似资料:
  • 12月8日,我开始在运行一个Android项目(使用Flatter框架创建)时遇到问题,该项目已经发布到Google Play上,在编译之前从未出现过问题。 我得到的错误如下: 所以我开始挖掘,发现我最近的变化不是问题所在。Bintray下载中心似乎是12月1日的日落(google.Bintray.com) 由于我使用的是一些Firebase软件包的旧版本,因此此链接似乎已关闭,现在我无法编译我的

  • 我正在创建一个新的Karaf特性,它将包含几个包(jclouds)。我还有一个maven“superproject”(jclouds-all),它包含我需要的所有模块/包。 在定义特性时,是否可以只指定一个SuperProject的bundle,并自动解析所有具体的bundle,或者我需要在特性中列出所有的bundle?

  • 尝试运行android应用程序时出现以下错误 无法解析对“:app@release/compileClasspath”的依赖项:无法解析com . github . congle 7997:Google IAP:1 . 0 . 8。显示受影响模块的详细信息:应用程序 build.gradle

  • 问题内容: javdoc的内容如下: 从v1.5开始,由于下面详述的异常,建议您避免使用DateMidnight并使用toDateTimeAtStartOfDay()代替。 如果默认时区在午夜切换为夏时制,并且此LocalDate表示该切换日期,则此方法将引发异常。问题在于,在规定的日期没有午夜这样的时间,因此会引发异常。 午夜在某些时区中不存在的事实似乎足以避免完全使用(假设您的代码未使用固定的

  • 我是一名新的Android学习者,我正在为语言翻译制作我的第一个Android应用程序。在添加了一些依赖项之后,我遇到了一些问题。我该怎么解决这个问题? Gradle同步失败:无法解决配置的所有依赖项: app: dedegRuntimeClasspath。无法确定android.arch.lifecycle的工件: livedata: 1.1.1:脱机模式下没有缓存版本有关详细信息,请参阅IDE

  • 问题内容: 我有一个带有内部jar文件的项目内仓库的Maven项目。我使用install命令将jar文件安装到内部注入存储库中,当我在存储库中签入安装jar文件时,我还在pom文件中添加了依赖项配置。但是当我运行mvn编译文件时。我收到mvn无法解决依赖关系的错误 这是Pom片段: 这是POM中的依赖 这是错误消息: [INFO]最终内存:6M / 309M 是否有人对此错误有任何建议。 这是使用