Otavio Rodolfo Piske created CAMEL-23933:
--------------------------------------------

             Summary: camel-tooling-maven depends on deprecated 
maven-resolver-supplier causing classpath conflicts with 
maven-resolver-supplier-mvn3
                 Key: CAMEL-23933
                 URL: https://issues.apache.org/jira/browse/CAMEL-23933
             Project: Camel
          Issue Type: Improvement
          Components: camel-kamelet-main
    Affects Versions: 4.21.0, 4.18.3
            Reporter: Otavio Rodolfo Piske


camel-tooling-maven depends on 
org.apache.maven.resolver:maven-resolver-supplier:1.9.27, which is the 
pre-split artifact from the Maven Resolver 1.x era. In Maven Resolver 2.0.x, 
this artifact was split into maven-resolver-supplier-mvn3 and 
maven-resolver-supplier-mvn4.

Both maven-resolver-supplier (1.9.x) and maven-resolver-supplier-mvn3 (2.0.x) 
provide the class org.eclipse.aether.supplier.RepositorySystemSupplier. When a 
project uses camel-tooling-maven alongside any library that depends on 
maven-resolver-supplier-mvn3 (the current recommended artifact), both jars end 
up on the classpath. Maven does not detect a conflict because they have 
different artifact IDs.

At runtime, the classloader may pick the old RepositorySystemSupplier from 
maven-resolver-supplier:1.9.27, which references 
org.eclipse.aether.internal.impl.DefaultTrackingFileManager. This class was 
removed in maven-resolver-impl:2.0.x (which Maven resolves to as the higher 
version), resulting in NoClassDefFoundError.

Steps to reproduce:

1. Create a project that depends on both camel-kamelet-main (which transitively 
brings in camel-tooling-maven) and any artifact using 
maven-resolver-supplier-mvn3:2.0.x
2. Call new RepositorySystemSupplier().get()
3. NoClassDefFoundError: 
org/eclipse/aether/internal/impl/DefaultTrackingFileManager

Expected behavior: camel-tooling-maven should depend on 
maven-resolver-supplier-mvn3 instead of the deprecated maven-resolver-supplier, 
avoiding classpath conflicts with consumers already on the 2.0.x resolver.

Workaround: Exclude maven-resolver-supplier from camel-kamelet-main:
  <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-kamelet-main</artifactId>
      <exclusions>
          <exclusion>
              <groupId>org.apache.maven.resolver</groupId>
              <artifactId>maven-resolver-supplier</artifactId>
          </exclusion>
      </exclusions>
  </dependency>



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to