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)