2015-05-06 1 views
1

У моего пакета есть зависящая от пакета зависимость от Joda-Time 2.x и развертывается через файл характеристик Karaf (3.0.3). Он развернулся просто отлично, пока я не добавил зависимости к функциям activemq-broker (5.11.1) и activemq-camel, поставляемым с Karaf. Теперь у моего пакета нет разрешения, потому что найдены два пути к пакету «org.joda.time». Одним из них является версия 2.7 Я в зависимости от, другой версии 1.6, которая является транзитивной зависимости от особенностей ActiveMQ:Karaf не может разрешить пакет в зависимости от функции ActiveMQ из-за нескольких версий Joda-Time.

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 сверток. Только после этого начинается мой пакет.

Что такое «правильный» способ решения этих проблем? Особенно тот, когда возобновляется Karaf? Думаю, я мог бы решить проблему, вложив v2.7 в Joda Time в свой собственный пакет, но это всего лишь взломать.

В настоящее время эта функция выглядит следующим образом:

<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.owasp.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> 

EDIT:

Это issue описывает ту же самую проблему для компонента Camel Salesforce. По-видимому, это было зафиксировано widening the version range импорта в [1.6,3]. Набор ActiveMQ применяет тот же диапазон версий, но он все еще создает проблемы.

ответ

1

Сценарий, приведенный выше, представляет собой вариант проблемы, описанной в этом документе blog post Нила Бартлетта. Поскольку я не имею никакого контроля над ActiveMQs прямой и транзитивным зависимостей единственные варианты я могу видеть, являются

  1. Понизить собственную зависимость Joda-времени, чтобы соответствовать версии, используемой XStream
  2. Statically link/встраивать Joda-Time 2.7 в мой собственный комплект

Я пошел на вариант 2).