2017-04-19 98 views
0

我當前正在開發一個駱駝路由,它從netty4/mllp端點讀取並將hl7消息存儲到amqp隊列中。在karaf中啓動bundle時出錯:「via two dependency chains」

這是我的環境:

  • 的Apache Maven的-3.3.9
  • Apache的karaf-4.1.1
  • Apache的駱駝2.18.3
  • Apache的ARTEMIS-2.0 0.0

這是我的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

<modelVersion>4.0.0</modelVersion> 
<groupId>*****</groupId> 
<artifactId>*****</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>bundle</packaging> 
<name>*****</name> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.6.1</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <version>3.3.0</version> 
      <extensions>true</extensions> 
      <configuration> 
       <instructions> 
        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> 
        <Bundle-SymbolicName>${project.artifactId}-bundle</Bundle-SymbolicName> 
        <Bundle-Activator>${project.groupId}.${project.artifactId}.*****.*****</Bundle-Activator> 
       </instructions> 
      </configuration> 
     </plugin> 
    </plugins> 

</build> 

<dependencies> 
    <dependency> 
     <groupId>org.osgi</groupId> 
     <artifactId>org.osgi.core</artifactId> 
     <version>6.0.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.7.25</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-slf4j-impl</artifactId> 
     <version>2.8.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-core</artifactId> 
     <version>2.8.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-core</artifactId> 
     <version>2.18.3</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-amqp</artifactId> 
     <version>2.18.3</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-netty4</artifactId> 
     <version>2.18.3</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.camel</groupId> 
     <artifactId>camel-hl7</artifactId> 
     <version>2.18.3</version> 
    </dependency> 
</dependencies> 

我可以在eclipse中用「main」類運行項目,沒有問題。但是當我將這個軟件包部署到Karaf容器時,我遇到了一些問題。

我正在使用apache felix插件maven clean package目標生成捆綁jar,與previus pom.xml文件。

卡拉夫安裝是一個乾淨的。我只有設置如下:同karaf容器內

  • 阿蒂米斯AMQP代理

feature:repo-add artemis feature:install artemis-amqp

  • 駱駝部件

feature:repo-add camel feature:install camel-core camel-netty4 camel-amqp camel-hl7

我將jar包複製到deploy文件夾中,並嘗試用bundle:start my-bundle啓動它,但出現以下錯誤。

Error executing command: Error executing command on bundles: 
Error starting bundle 110: Unable to resolve demograficos-bundle [110](R 110.0): missing requirement [demograficos-bundle [110](R 110.0)] osgi.wiring.package; (&(osgi.wiring.package=javax.jms)(version>=1.1.0)(!(version>=2.0.0))) Unresolved requirements: [[demograficos-bundle [110](R 110.0)] osgi.wiring.package; (&(osgi.wiring.package=javax.jms)(version>=1.1.0)(!(version>=2.0.0)))] 

我明白從容器中缺少jms實現。

我試過feature:install jms,但現在我得到了以下錯誤

 
Error executing command: Error executing command on bundles: 
     Error starting bundle 110: Uses constraint violation. Unable to resolve resource demograficos-bundle [demograficos-bundle [110](R 110.0)] because it is exposed to package 'javax.jms' from resources org.apache.geronimo.specs.geronimo-jms_1.1_spec [org.apache.geronimo.specs.geronimo-jms_1.1_spec [120](R 120.0)] and org.apache.geronimo.specs.geronimo-jms_2.0_spec [org.apache.geronimo.specs.geronimo-jms_2.0_spec [75](R 75.0)] via two dependency chains. 

Chain 1: 
    demograficos-bundle [demograficos-bundle [110](R 110.0)] 
    import: (&(osgi.wiring.package=javax.jms)(version>=1.1.0)(!(version>=2.0.0))) 
    | 
    export: osgi.wiring.package: javax.jms 
    org.apache.geronimo.specs.geronimo-jms_1.1_spec [org.apache.geronimo.specs.geronimo-jms_1.1_spec [120](R 120.0)] 

Chain 2: 
    demograficos-bundle [demograficos-bundle [110](R 110.0)] 
    import: (&(osgi.wiring.package=org.apache.camel.component.amqp)(version>=2.18.0)(!(version>=3.0.0))) 
    | 
    export: osgi.wiring.package=org.apache.camel.component.amqp; uses:=javax.jms 
    org.apache.camel.camel-amqp [org.apache.camel.camel-amqp [86](R 86.0)] 
    import: (&(osgi.wiring.package=javax.jms)(version>=1.1.0)(!(version>=3.0.0))) 
    | 
    export: osgi.wiring.package: javax.jms 
    org.apache.geronimo.specs.geronimo-jms_2.0_spec [org.apache.geronimo.specs.geronimo-jms_2.0_spec [75](R 75.0)] Unresolved requirements: [[demograficos-bundle [110](R 110.0)] osgi.wiring.package; (&(osgi.wiring.package=org.apache.camel.component.amqp)(version>=2.18.0)(!(version>=3.0.0)))] 

但我不能看到兩個previus Geronimo的捆綁上市,只有一個

START LEVEL 100 , List Threshold: 50 
ID | State  | Lvl | Version  | Name 
----+-----------+-----+----------------+--------------------------------------------------------------------------------------------------- 
28 | Active | 80 | 4.1.1   | Apache Karaf :: OSGi Services :: Event 
52 | Active | 80 | 19.0.0   | Guava: Google Core Libraries for Java 
53 | Active | 80 | 4.1.6.Final | Netty/Buffer 
54 | Active | 80 | 4.1.6.Final | Netty/Codec 
55 | Active | 80 | 4.1.6.Final | Netty/Codec/HTTP 
56 | Active | 80 | 4.1.6.Final | Netty/Common 
57 | Active | 80 | 4.1.6.Final | Netty/Handler 
58 | Active | 80 | 4.1.6.Final | Netty/Resolver 
59 | Active | 80 | 4.1.6.Final | Netty/Transport 
60 | Active | 80 | 3.0.0   | Expression Language 3.0 API 
61 | Active | 80 | 1.2.0   | CDI APIs 
62 | Active | 80 | 1.2   | javax.interceptor API 
63 | Active | 80 | 1.2   | javax.transaction API 
64 | Active | 80 | 2.0.0   | ActiveMQ Artemis AMQP Protocol 
65 | Active | 80 | 2.0.0   | ActiveMQ Artemis Native POM 
66 | Active | 80 | 2.0.0   | ActiveMQ Artemis Server OSGi 
67 | Active | 80 | 1.1.1   | Apache Aries Transaction Blueprint 
68 | Active | 80 | 2.1.0   | Apache Aries Transaction Blueprint 
69 | Active | 80 | 1.3.2   | Apache Aries Transaction Manager 
70 | Active | 80 | 1.9.2   | Apache Commons BeanUtils 
71 | Active | 80 | 3.2.2   | Apache Commons Collections 
72 | Active | 80 | 1.0.2   | Apache Felix Coordinator Service 
75 | Active | 80 | 1.0.0.alpha-2 | Apache Geronimo JMS Spec 2.0 
76 | Active | 80 | 1.0.0.alpha-1 | Apache Geronimo JSon Spec 1.0 
77 | Active | 80 | 0.9.5   | Johnzon :: Core 
81 | Active | 80 | 0.20.0   | QpidJMS Client 
82 | Active | 80 | 0.16.0   | proton-j 
83 | Active | 80 | 1.0.0.2  | Apache ServiceMix :: Bundles :: javax.inject 
84 | Active | 80 | 3.3.0.Final | JBoss Logging 3 
85 | Active | 80 | 3.6.9.Final | JGroups 
86 | Active | 50 | 2.18.3   | camel-amqp 
87 | Active | 50 | 2.18.3   | camel-catalog 
88 | Active | 50 | 2.18.3   | camel-commands-core 
89 | Active | 50 | 2.18.3   | camel-core 
90 | Active | 50 | 2.18.3   | camel-jms 
91 | Active | 80 | 2.18.3   | camel-karaf-commands 
92 | Active | 50 | 1.6.0   | Commons Pool 
105 | Active | 50 | 4.1.7.Final | Netty/Transport/Native/Epoll 
106 | Active | 50 | 2.18.3   | camel-netty4 
107 | Active | 50 | 2.2   | HAPI - Java HL7 API - OSGI Bundle 
108 | Active | 50 | 2.18.3   | camel-hl7 
109 | Active | 50 | 2.0.14   | Apache MINA Core 
110 | Installed | 80 | 0.0.1.SNAPSHOT | ********** 
111 | Active | 80 | 2.0.0   | ActiveMQ Artemis HornetQ Protocol 
112 | Active | 80 | 2.0.0   | ActiveMQ Artemis HQClient Protocol 
114 | Active | 80 | 4.1.6.Final | Netty/Codec/MQTT 
115 | Active | 80 | 2.0.0   | ActiveMQ Artemis MQTT Protocol 
116 | Active | 80 | 2.0.0   | ActiveMQ Artemis OpenWire Protocol 
117 | Active | 80 | 2.0.0   | ActiveMQ Artemis STOMP Protocol 
118 | Active | 80 | 1.0.1   | geronimo-j2ee-management_1.1_spec 
119 | Active | 80 | 1.11.0   | hawtbuf 
123 | Active | 80 | 4.1.1   | Apache Karaf :: JMS :: Core 





[email protected]()> bundle:tree-show ***** 
Bundle **********-bundle [110] is currently INSTALLED 
- import javax.jms;version="[1.1,2)": resolved using org.apache.geronimo.specs.geronimo-jms_1.1_spec [122] 
- import org.apache.camel;version="[2.18,3)": resolved using org.apache.camel.camel-core [89] 
- import org.apache.camel.builder;version="[2.18,3)": resolved using org.apache.camel.camel-core [89] 
- import org.apache.camel.component.amqp;version="[2.18,3)": resolved using org.apache.camel.camel-amqp [86] 
- import org.apache.camel.component.hl7;version="[2.18,3)": resolved using org.apache.camel.camel-hl7 [108] 
- import org.apache.camel.impl;version="[2.18,3)": resolved using org.apache.camel.camel-core [89] 
- import org.apache.camel.model;version="[2.18,3)": resolved using org.apache.camel.camel-core [89] 
- import org.apache.camel.spi;version="[2.18,3)": resolved using org.apache.camel.camel-core [89] 
- import org.osgi.framework;version="[1.8,2)": resolved using org.apache.felix.framework [0] 
- import org.slf4j;version="[1.7,2)": resolved using org.ops4j.pax.logging.pax-logging-api [5] 
- import org.slf4j;version="[1.7,2)": resolved using org.ops4j.pax.logging.pax-logging-api [5] 
- import org.slf4j;version="[1.7,2)": resolved using org.ops4j.pax.logging.pax-logging-api [5] 

Warning: the below tree is a rough approximation of a possible resolution 
demograficos-bundle [110] 
+- org.apache.geronimo.specs.geronimo-jms_1.1_spec [122] 
| +- javax.transaction-api [63] 
|  +- javax.enterprise.cdi-api [61] 
|  | +- javax.el-api [60] 
|  | +- org.apache.servicemix.bundles.javax-inject [83] 
|  | +- javax.interceptor-api [62] 
|  +- javax.interceptor-api [62] 
+- org.apache.camel.camel-core [89] 
| +- org.ops4j.pax.logging.pax-logging-api [5] 
| | +- org.apache.karaf.services.eventadmin [3] 
| |  +- org.apache.felix.metatype [2] 
| |  +- org.apache.felix.configadmin [7] 
| +- org.apache.servicemix.bundles.spring-tx [102] 
|  +- org.ops4j.pax.logging.pax-logging-api [5] 
|  +- org.apache.servicemix.bundles.aopalliance [93] 
|  +- javax.transaction-api [63] 
|  +- org.apache.servicemix.bundles.spring-aop [95] 
|  | +- org.ops4j.pax.logging.pax-logging-api [5] 
|  | +- org.apache.servicemix.bundles.aopalliance [93] 
|  | +- org.apache.commons.pool [92] 
|  | +- org.apache.servicemix.bundles.spring-beans [96] 
|  | | +- org.ops4j.pax.logging.pax-logging-api [5] 
|  | | +- org.apache.servicemix.bundles.javax-inject [83] 
|  | | +- org.apache.servicemix.bundles.spring-core [99] 
|  | |  +- org.ops4j.pax.logging.pax-logging-api [5] 
|  | +- org.apache.servicemix.bundles.spring-core [99] 
|  +- org.apache.servicemix.bundles.spring-beans [96] 
|  +- org.apache.servicemix.bundles.spring-core [99] 
|  +- org.apache.servicemix.bundles.spring-context [97] 
|  +- org.apache.geronimo.specs.geronimo-jms_2.0_spec [75] 
|  | +- javax.transaction-api [63] 
|  +- org.ops4j.pax.logging.pax-logging-api [5] 
|  +- org.apache.servicemix.bundles.javax-inject [83] 
|  +- org.apache.servicemix.bundles.spring-expression [100] 
|  | +- org.ops4j.pax.logging.pax-logging-api [5] 
|  | +- org.apache.servicemix.bundles.spring-core [99] 
|  +- org.apache.servicemix.bundles.aopalliance [93] 
|  +- javax.interceptor-api [62] 
|  +- org.apache.servicemix.bundles.spring-aop [95] 
|  +- org.apache.servicemix.bundles.spring-beans [96] 
|  +- org.apache.servicemix.bundles.spring-core [99] 
+- org.apache.camel.camel-amqp [86] 
| +- org.apache.camel.camel-core [89] 
| +- org.apache.geronimo.specs.geronimo-jms_2.0_spec [75] 
| +- org.apache.qpid.jms.client [81] 
| | +- org.apache.geronimo.specs.geronimo-jms_2.0_spec [75] 
| | +- org.ops4j.pax.logging.pax-logging-api [5] 
| | +- io.netty.handler [57] 
| | | +- io.netty.codec [54] 
| | | | +- io.netty.buffer [53] 
| | | | | +- io.netty.common [56] 
| | | | |  +- org.ops4j.pax.logging.pax-logging-api [5] 
| | | | +- io.netty.transport [59] 
| | | | | +- io.netty.resolver [58] 
| | | | | | +- io.netty.common [56] 
| | | | | +- io.netty.buffer [53] 
| | | | | +- io.netty.common [56] 
| | | | +- io.netty.common [56] 
| | | +- io.netty.buffer [53] 
| | | +- io.netty.transport [59] 
| | | +- io.netty.common [56] 
| | +- io.netty.codec-http [55] 
| | | +- io.netty.codec [54] 
| | | +- io.netty.handler [57] 
| | | +- io.netty.buffer [53] 
| | | +- io.netty.transport [59] 
| | | +- io.netty.common [56] 
| | +- org.apache.qpid.proton-j [82] 
| | +- io.netty.buffer [53] 
| | +- io.netty.transport [59] 
| | +- io.netty.common [56] 
| +- org.apache.camel.camel-jms [90] 
|  +- org.apache.camel.camel-core [89] 
|  +- org.apache.geronimo.specs.geronimo-jms_2.0_spec [75] 
|  +- org.ops4j.pax.logging.pax-logging-api [5] 
|  +- org.apache.servicemix.bundles.spring-jms [101] 
|  | +- org.apache.geronimo.specs.geronimo-jms_2.0_spec [75] 
|  | +- org.ops4j.pax.logging.pax-logging-api [5] 
|  | +- org.apache.servicemix.bundles.spring-tx [102] 
|  | +- org.apache.servicemix.bundles.spring-expression [100] 
|  | +- org.apache.servicemix.bundles.aopalliance [93] 
|  | +- org.apache.servicemix.bundles.spring-aop [95] 
|  | +- io.netty.transport [59] 
|  | +- org.apache.servicemix.bundles.spring-beans [96] 
|  | +- org.apache.servicemix.bundles.spring-core [99] 
|  | +- io.netty.common [56] 
|  | +- org.apache.servicemix.bundles.spring-context [97] 
|  +- org.apache.servicemix.bundles.spring-tx [102] 
|  +- org.apache.servicemix.bundles.spring-beans [96] 
|  +- org.apache.servicemix.bundles.spring-core [99] 
|  +- org.apache.servicemix.bundles.spring-context [97] 
+- org.apache.camel.camel-hl7 [108] 
| +- org.apache.camel.camel-core [89] 
| +- io.netty.codec [54] 
| +- org.ops4j.pax.logging.pax-logging-api [5] 
| +- org.apache.camel.camel-netty4 [106] 
| | +- org.apache.camel.camel-core [89] 
| | +- io.netty.codec [54] 
| | +- org.ops4j.pax.logging.pax-logging-api [5] 
| | +- io.netty.handler [57] 
| | +- io.netty.transport [59] 
| | +- io.netty.buffer [53] 
| | +- org.apache.commons.pool [92] 
| | +- io.netty.transport-native-epoll [105] 
| | | +- io.netty.buffer [53] 
| | | +- io.netty.transport [59] 
| | | +- io.netty.common [56] 
| | +- io.netty.common [56] 
| +- org.apache.mina.core [109] 
| | +- org.ops4j.pax.logging.pax-logging-api [5] 
| +- io.netty.buffer [53] 
| +- ca.uhn.hapi.osgi-base [107] 
| | +- org.apache.geronimo.specs.geronimo-jms_2.0_spec [75] 
| +- io.netty.transport [59] 
+- org.apache.felix.framework [0] 
+- org.ops4j.pax.logging.pax-logging-api [5] 

WARNING: multiple bundles are exporting package javax.jms 
- org.apache.geronimo.specs.geronimo-jms_2.0_spec [75] 
- org.apache.geronimo.specs.geronimo-jms_1.1_spec [122] 

我真的有一些麻煩了解jar/bundle版本如何在karaf下一起工作。

任何想法?也許我應該更改pom.xml中的felix插件

回答

2

看起來像是聲明瞭自己的包,它將javax.jms包導出到版本1.1中,而Artemis依賴於導出2.0版中的javax.jms的包,make當然你也依賴於2.0版本的javax.jms版本(因爲這是artemis使用的版本),你的問題將會消失。

+0

對不起,但我該怎麼做?我不明白爲什麼我使用jms 1.1,因爲我的pom.xml中沒有任何引用,所以 – usuario

+0

必須位於你的傳遞依賴中,最好在你的maven pom中爲jms 2.0提供一個專用的依賴。 –

+0

我已將以下內容添加到felix maven插件配置 ' javax.jms; version =「[2.0,3)」,*' 現在它正在工作。 – usuario