Jiri Daněk created FELIX-5993:
---------------------------------

             Summary: Depending on how Maven resolves dependencies, 
Embed-Dependency may miss some dependencies
                 Key: FELIX-5993
                 URL: https://issues.apache.org/jira/browse/FELIX-5993
             Project: Felix
          Issue Type: Bug
          Components: Maven Bundle Plugin
    Affects Versions: maven-bundle-plugin-4.0.0
            Reporter: Jiri Daněk
         Attachments: pom.xml

Consider the linked reproducer project (just the pom.xml in attachment, no 
sources needed). It consists of two dependencies, qpid-jms in the compile 
scope, and two activemq-artemis artifacts in the test scope. They all have 
dependency on netty.

Build the project and look for class ByteToMessageDecoder in the bundle

{noformat}
    mvn package
    jar -tf target/jarFinalName-libraryVersion.jar | grep ByteToMessageDecoder
{noformat}

The class is missing.

Now remove the two test dependencies from the pom.xml file and do the above 
commands again.

The class is now found

{noformat}
    % jar -tf target/jarFinalName-libraryVersion.jar| grep ByteToMessageDecoder
    io/netty/handler/codec/ByteToMessageDecoder$1.class
    io/netty/handler/codec/ByteToMessageDecoder$2.class
    io/netty/handler/codec/ByteToMessageDecoder$Cumulator.class
    io/netty/handler/codec/ByteToMessageDecoder.class
{noformat}

h3. Expected result

I need to have ByteToMessageDecoder in my bundle, regardless of what other test 
dependencies I am including to the project. My project requires that class to 
function.

h3. My understanding of the cause

The class is contained in netty-codec jar.

The qpid-jms wants to bring version 4.1.31 of netty-codec, and activemq-artemis 
wants 4.1.24. The older one wins, but in the dependency tree, that included 
netty-codec is a child of a test-scoped artifact now.

When the felix bundle plugin searches the dependency tree, it goes only through 
artifacts which can be reached through compile- and runtime-scoped 
dependencies, and it misses this one.

This means, that the mvn dependency:tree -Dverbose looks like this (being aware 
of limitations of -Dverbose)

{noformat}
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ 
felix-bundle-test-inclusion-bug ---
[INFO] com.rathate.mqe.apache:felix-bundle-test-inclusion-bug:jar:1.0-SNAPSHOT
[INFO] +- org.apache.qpid:qpid-jms-client:jar:0.38.0:compile
[INFO] |  +- org.slf4j:slf4j-api:jar:1.7.25:compile
[INFO] |  +- 
org.apache.geronimo.specs:geronimo-jms_2.0_spec:jar:1.0-alpha-2:compile
[INFO] |  +- org.apache.qpid:proton-j:jar:0.30.0:compile
[INFO] |  +- io.netty:netty-buffer:jar:4.1.31.Final:compile
[INFO] |  |  \- (io.netty:netty-common:jar:4.1.31.Final:compile - omitted for 
duplicate)
[INFO] |  +- io.netty:netty-common:jar:4.1.31.Final:compile
[INFO] |  +- io.netty:netty-handler:jar:4.1.31.Final:compile
[INFO] |  |  +- (io.netty:netty-buffer:jar:4.1.31.Final:compile - omitted for 
duplicate)
[INFO] |  |  +- (io.netty:netty-transport:jar:4.1.31.Final:compile - omitted 
for duplicate)
[INFO] |  |  \- io.netty:netty-codec:jar:4.1.24.Final:compile
[INFO] |  |     \- (io.netty:netty-transport:jar:4.1.31.Final:compile - omitted 
for duplicate)
[INFO] |  +- io.netty:netty-transport:jar:4.1.31.Final:compile
[INFO] |  |  +- (io.netty:netty-buffer:jar:4.1.31.Final:compile - omitted for 
duplicate)
[INFO] |  |  \- io.netty:netty-resolver:jar:4.1.31.Final:compile
[INFO] |  |     \- (io.netty:netty-common:jar:4.1.31.Final:compile - omitted 
for duplicate)
[INFO] |  +- 
io.netty:netty-transport-native-epoll:jar:linux-x86_64:4.1.31.Final:compile
[INFO] |  |  +- (io.netty:netty-common:jar:4.1.31.Final:compile - omitted for 
duplicate)
[INFO] |  |  +- (io.netty:netty-buffer:jar:4.1.31.Final:compile - omitted for 
duplicate)
[INFO] |  |  +- 
io.netty:netty-transport-native-unix-common:jar:4.1.31.Final:compile
[INFO] |  |  |  +- (io.netty:netty-common:jar:4.1.31.Final:compile - omitted 
for duplicate)
[INFO] |  |  |  \- (io.netty:netty-transport:jar:4.1.31.Final:compile - omitted 
for duplicate)
[INFO] |  |  \- (io.netty:netty-transport:jar:4.1.31.Final:compile - omitted 
for duplicate)
[INFO] |  +- 
io.netty:netty-transport-native-kqueue:jar:osx-x86_64:4.1.31.Final:compile
[INFO] |  |  +- (io.netty:netty-common:jar:4.1.31.Final:compile - omitted for 
duplicate)
[INFO] |  |  +- (io.netty:netty-buffer:jar:4.1.31.Final:compile - omitted for 
duplicate)
[INFO] |  |  +- 
(io.netty:netty-transport-native-unix-common:jar:4.1.31.Final:compile - omitted 
for duplicate)
[INFO] |  |  \- (io.netty:netty-transport:jar:4.1.31.Final:compile - omitted 
for duplicate)
[INFO] |  \- io.netty:netty-codec-http:jar:4.1.31.Final:compile
[INFO] |     \- (io.netty:netty-codec:jar:4.1.31.Final:compile - omitted for 
duplicate)
[INFO] +- org.apache.activemq:artemis-amqp-protocol:jar:2.6.3:test
[INFO] |  +- org.apache.activemq:artemis-jms-client:jar:2.6.3:test
[INFO] |  |  +- (org.apache.activemq:artemis-core-client:jar:2.6.3:test - 
omitted for duplicate)
[INFO] |  |  +- (org.apache.activemq:artemis-selector:jar:2.6.3:test - omitted 
for duplicate)
[INFO] |  |  \- 
(org.apache.geronimo.specs:geronimo-jms_2.0_spec:jar:1.0-alpha-2:test - omitted 
for duplicate)
[INFO] |  +- org.apache.activemq:artemis-selector:jar:2.6.3:test
[INFO] |  |  \- (org.apache.activemq:artemis-commons:jar:2.6.3:test - omitted 
for duplicate)
[INFO] |  +- org.apache.activemq:artemis-core-client:jar:2.6.3:test
[INFO] |  |  +- org.jgroups:jgroups:jar:3.6.13.Final:test
[INFO] |  |  +- (org.apache.activemq:artemis-commons:jar:2.6.3:test - omitted 
for duplicate)
[INFO] |  |  +- 
(org.apache.geronimo.specs:geronimo-json_1.0_spec:jar:1.0-alpha-1:test - 
omitted for duplicate)
[INFO] |  |  +- org.apache.johnzon:johnzon-core:jar:0.9.5:test
[INFO] |  |  +- 
(io.netty:netty-transport-native-epoll:jar:linux-x86_64:4.1.24.Final:test - 
omitted for conflict with 4.1.31.Final)
[INFO] |  |  +- 
(io.netty:netty-transport-native-kqueue:jar:osx-x86_64:4.1.24.Final:test - 
omitted for conflict with 4.1.31.Final)
[INFO] |  |  +- (io.netty:netty-codec-http:jar:4.1.24.Final:test - omitted for 
conflict with 4.1.31.Final)
[INFO] |  |  +- (io.netty:netty-buffer:jar:4.1.24.Final:test - omitted for 
conflict with 4.1.31.Final)
[INFO] |  |  +- (io.netty:netty-transport:jar:4.1.24.Final:test - omitted for 
conflict with 4.1.31.Final)
[INFO] |  |  +- (io.netty:netty-handler:jar:4.1.24.Final:test - omitted for 
conflict with 4.1.31.Final)
[INFO] |  |  +- (io.netty:netty-codec:jar:4.1.24.Final:test - omitted for 
conflict with 4.1.24.Final)
[INFO] |  |  \- (io.netty:netty-common:jar:4.1.24.Final:test - omitted for 
conflict with 4.1.31.Final)
[INFO] |  +- org.apache.activemq:artemis-commons:jar:2.6.3:test
[INFO] |  |  +- (org.jboss.logging:jboss-logging:jar:3.3.1.Final:test - omitted 
for duplicate)
[INFO] |  |  +- (io.netty:netty-buffer:jar:4.1.24.Final:test - omitted for 
conflict with 4.1.31.Final)
[INFO] |  |  +- (io.netty:netty-transport:jar:4.1.24.Final:test - omitted for 
conflict with 4.1.31.Final)
[INFO] |  |  +- (io.netty:netty-handler:jar:4.1.24.Final:test - omitted for 
conflict with 4.1.31.Final)
[INFO] |  |  \- (commons-beanutils:commons-beanutils:jar:1.9.3:test - omitted 
for duplicate)
[INFO] |  +- org.jboss.logging:jboss-logging:jar:3.3.1.Final:test
[INFO] |  +- (org.apache.activemq:artemis-server:jar:2.6.3:test - omitted for 
duplicate)
[INFO] |  +- org.apache.activemq:artemis-journal:jar:2.6.3:test
[INFO] |  |  +- (org.jboss.logging:jboss-logging:jar:3.3.1.Final:test - omitted 
for duplicate)
[INFO] |  |  +- (org.apache.activemq:artemis-commons:jar:2.6.3:test - omitted 
for duplicate)
[INFO] |  |  +- (org.apache.activemq:artemis-native:jar:2.6.3:test - omitted 
for duplicate)
[INFO] |  |  +- (io.netty:netty-buffer:jar:4.1.24.Final:test - omitted for 
conflict with 4.1.31.Final)
[INFO] |  |  \- (io.netty:netty-common:jar:4.1.24.Final:test - omitted for 
conflict with 4.1.31.Final)
[INFO] |  +- (org.apache.qpid:proton-j:jar:0.27.3:test - omitted for conflict 
with 0.30.0)
[INFO] |  +- (io.netty:netty-buffer:jar:4.1.24.Final:test - omitted for 
conflict with 4.1.31.Final)
[INFO] |  \- (io.netty:netty-transport:jar:4.1.24.Final:test - omitted for 
conflict with 4.1.31.Final)
[INFO] \- org.apache.activemq:artemis-server:jar:2.6.3:test
[INFO]    +- (org.jboss.logging:jboss-logging:jar:3.3.1.Final:test - omitted 
for duplicate)
[INFO]    +- (org.apache.activemq:artemis-commons:jar:2.6.3:test - omitted for 
duplicate)
[INFO]    +- (org.apache.activemq:artemis-selector:jar:2.6.3:test - omitted for 
duplicate)
[INFO]    +- (org.apache.activemq:artemis-journal:jar:2.6.3:test - omitted for 
duplicate)
[INFO]    +- org.apache.activemq:artemis-jdbc-store:jar:2.6.3:test
[INFO]    |  +- (org.jboss.logging:jboss-logging:jar:3.3.1.Final:test - omitted 
for duplicate)
[INFO]    |  +- (org.apache.activemq:artemis-commons:jar:2.6.3:test - omitted 
for duplicate)
[INFO]    |  +- (org.apache.activemq:artemis-journal:jar:2.6.3:test - omitted 
for duplicate)
[INFO]    |  \- (org.apache.activemq:artemis-core-client:jar:2.6.3:test - 
omitted for duplicate)
[INFO]    +- (org.apache.activemq:artemis-core-client:jar:2.6.3:test - omitted 
for duplicate)
[INFO]    +- org.apache.activemq:artemis-native:jar:2.6.3:test
[INFO]    |  \- (org.jboss.logging:jboss-logging:jar:3.3.1.Final:test - omitted 
for duplicate)
[INFO]    +- (io.netty:netty-buffer:jar:4.1.24.Final:test - omitted for 
conflict with 4.1.31.Final)
[INFO]    +- (io.netty:netty-transport:jar:4.1.24.Final:test - omitted for 
conflict with 4.1.31.Final)
[INFO]    +- (io.netty:netty-codec-http:jar:4.1.24.Final:test - omitted for 
conflict with 4.1.31.Final)
[INFO]    +- (io.netty:netty-common:jar:4.1.24.Final:test - omitted for 
conflict with 4.1.31.Final)
[INFO]    +- (io.netty:netty-handler:jar:4.1.24.Final:test - omitted for 
conflict with 4.1.31.Final)
[INFO]    +- 
(io.netty:netty-transport-native-epoll:jar:linux-x86_64:4.1.24.Final:test - 
omitted for conflict with 4.1.31.Final)
[INFO]    +- 
(io.netty:netty-transport-native-kqueue:jar:osx-x86_64:4.1.24.Final:test - 
omitted for conflict with 4.1.31.Final)
[INFO]    +- (io.netty:netty-codec:jar:4.1.24.Final:compile - scope updated 
from test; omitted for duplicate)
[INFO]    +- commons-beanutils:commons-beanutils:jar:1.9.3:test
[INFO]    |  +- commons-logging:commons-logging:jar:1.2:test
[INFO]    |  \- commons-collections:commons-collections:jar:3.2.2:test
[INFO]    +- commons-io:commons-io:jar:2.6:test
[INFO]    \- 
org.apache.geronimo.specs:geronimo-json_1.0_spec:jar:1.0-alpha-1:test
{noformat}

You can see that e.g. netty-codec does not appear in a chain of compile scoped 
dependencies, because it is instead captured in the test dependencies.

I'd expect that Embed-Dependency would still embed netty-codec into the bundle, 
because it is needed by the app itself, not just tests. This is not what 
happens, though.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to