This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch camel-4.10.x in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.10.x by this push: new 11207fd6a8e CAMEL-22100: Uses parent module in plugin deps resolution (#18154) (#18155) 11207fd6a8e is described below commit 11207fd6a8e49a61bf6d2efc32149ab1a63e29ee Author: Marco Carletti <mcarl...@redhat.com> AuthorDate: Thu May 22 14:43:30 2025 +0200 CAMEL-22100: Uses parent module in plugin deps resolution (#18154) (#18155) --- .../camel/dsl/jbang/core/common/PluginHelper.java | 3 ++- .../camel/main/download/DependencyDownloader.java | 10 +++++++ .../main/download/MavenDependencyDownloader.java | 24 +++++++++++++++-- .../camel/main/MavenDependencyResolverTest.java | 31 ++++++++++++++++++++++ .../camel/tooling/maven/MavenDownloader.java | 10 +++++++ .../camel/tooling/maven/MavenDownloaderImpl.java | 18 +++++++++++++ 6 files changed, 93 insertions(+), 3 deletions(-) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginHelper.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginHelper.java index fe9e504aa15..03ad763ea3b 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginHelper.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginHelper.java @@ -141,7 +141,8 @@ public final class PluginHelper { downloader.setClassLoader(ddlcl); downloader.start(); // downloads and adds to the classpath - downloader.downloadDependency(group, "camel-jbang-plugin-" + command, version); + downloader.downloadDependencyWithParent("org.apache.camel:camel-jbang-parent:" + version, group, + "camel-jbang-plugin-" + command, version); Optional<Plugin> instance = Optional.empty(); InputStream in = null; String path = FactoryFinder.DEFAULT_PATH + "camel-jbang-plugin/camel-jbang-plugin-" + command; diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloader.java index 044bf8cc726..3bf8dea115f 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloader.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloader.java @@ -107,6 +107,16 @@ public interface DependencyDownloader extends CamelContextAware, StaticService { */ void setMavenApacheSnapshotEnabled(boolean mavenApacheSnapshotEnabled); + /** + * Downloads the dependency incl transitive dependencies + * + * @param parentGav maven parent GAV + * @param groupId maven group id + * @param artifactId maven artifact id + * @param version maven version + */ + void downloadDependencyWithParent(String parentGav, String groupId, String artifactId, String version); + /** * Downloads the dependency incl transitive dependencies * diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java index dd7c219e2cf..8da92c54e8a 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java @@ -211,6 +211,11 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende this.mavenApacheSnapshotEnabled = mavenApacheSnapshotEnabled; } + @Override + public void downloadDependencyWithParent(String parentGav, String groupId, String artifactId, String version) { + doDownloadDependencyWithParent(parentGav, groupId, artifactId, version, true, false, null); + } + @Override public void downloadDependency(String groupId, String artifactId, String version) { downloadDependency(groupId, artifactId, version, true); @@ -234,6 +239,13 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende protected void doDownloadDependency( String groupId, String artifactId, String version, boolean transitively, boolean hidden, String extraRepos) { + doDownloadDependencyWithParent(null, groupId, artifactId, version, transitively, hidden, extraRepos); + } + + protected void doDownloadDependencyWithParent( + String parentGav, + String groupId, String artifactId, String version, boolean transitively, + boolean hidden, String extraRepos) { if (!hidden) { // trigger listener @@ -279,7 +291,7 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende extraRepositories.addAll(resolveExtraRepositories(known)); } - List<MavenArtifact> artifacts = resolveDependenciesViaAether(deps, extraRepositories, + List<MavenArtifact> artifacts = resolveDependenciesViaAether(parentGav, deps, extraRepositories, transitively, useApacheSnapshots); List<File> files = new ArrayList<>(); if (verbose) { @@ -565,10 +577,18 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende } public List<MavenArtifact> resolveDependenciesViaAether( + List<String> depIds, + Set<String> extraRepositories, boolean transitively, boolean useApacheSnapshots) { + return resolveDependenciesViaAether(null, depIds, extraRepositories, transitively, + useApacheSnapshots); + } + + public List<MavenArtifact> resolveDependenciesViaAether( + String parentGav, List<String> depIds, Set<String> extraRepositories, boolean transitively, boolean useApacheSnapshots) { try { - return mavenDownloader.resolveArtifacts(depIds, extraRepositories, transitively, useApacheSnapshots); + return mavenDownloader.resolveArtifacts(parentGav, depIds, extraRepositories, transitively, useApacheSnapshots); } catch (MavenResolutionException e) { String repos = (e.getRepositories() == null || e.getRepositories().isEmpty()) ? "(empty URL list)" diff --git a/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/MavenDependencyResolverTest.java b/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/MavenDependencyResolverTest.java index 980247b4a91..436cc13d361 100644 --- a/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/MavenDependencyResolverTest.java +++ b/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/MavenDependencyResolverTest.java @@ -17,6 +17,7 @@ package org.apache.camel.main; import java.util.List; +import java.util.function.Predicate; import org.apache.camel.main.download.MavenDependencyDownloader; import org.apache.camel.tooling.maven.MavenArtifact; @@ -58,4 +59,34 @@ public class MavenDependencyResolverTest { } } + @Test + public void testGeneratePluginUsesCorrectTransitiveDependencies() throws Exception { + List<String> deps = List.of("org.apache.camel:camel-jbang-plugin-generate:4.8.0"); + Predicate<MavenArtifact> artifactFilter = mavenArtifact -> "jackson-datatype-guava" + .equals(mavenArtifact.getGav().getArtifactId()); + try (MavenDependencyDownloader downloader = new MavenDependencyDownloader()) { + downloader.build(); + List<MavenArtifact> answer = downloader.resolveDependenciesViaAether(deps, null, + true, false); + Assertions.assertNotNull(answer); + Assertions.assertTrue(answer.stream().anyMatch(artifactFilter), + "check jackson-datatype-guava is present in transitive dependencies"); + //jackson version from Camel 4.8.0 parent should be 2.17.2 + String expectedVersion = "2.17.2"; + Assertions.assertNotEquals(expectedVersion, answer.stream().filter(artifactFilter) + .findFirst().get().getGav().getVersion(), + "check jackson-datatype-guava version without parent"); + + //resolve the dependencies with parent + answer = downloader.resolveDependenciesViaAether("org.apache.camel:camel-jbang-parent:4.8.0", + deps, null, true, false); + Assertions.assertNotNull(answer); + Assertions.assertTrue(answer.stream().anyMatch(artifactFilter), + "check jackson-datatype-guava is present in transitive dependencies"); + Assertions.assertEquals(expectedVersion, answer.stream().filter(artifactFilter) + .findFirst().get().getGav().getVersion(), + "check jackson-datatype-guava version with parent"); + } + } + } diff --git a/tooling/camel-tooling-maven/src/main/java/org/apache/camel/tooling/maven/MavenDownloader.java b/tooling/camel-tooling-maven/src/main/java/org/apache/camel/tooling/maven/MavenDownloader.java index 94cdfa29f58..2bede35309f 100644 --- a/tooling/camel-tooling-maven/src/main/java/org/apache/camel/tooling/maven/MavenDownloader.java +++ b/tooling/camel-tooling-maven/src/main/java/org/apache/camel/tooling/maven/MavenDownloader.java @@ -31,11 +31,21 @@ public interface MavenDownloader extends Service { * {@code groupId:artifactId[:packaging[:classifier]]:version}) is used to download artifacts from configured Maven * repositories. * + * @param rootGav root Maven artifact * @param dependencyGAVs a list of Maven coordinates * @param extraRepositories nullable list of additional repositories to use (except the discovered ones) * @param transitively whether to download/resolve dependencies transitively * @param useApacheSnapshots whether to include Apache Snapshots repository in the list of used repositories */ + List<MavenArtifact> resolveArtifacts( + String rootGav, + List<String> dependencyGAVs, Set<String> extraRepositories, + boolean transitively, boolean useApacheSnapshots) + throws MavenResolutionException; + + /** + * Overload for {@link MavenDownloader#resolveArtifacts(String, List, Set, boolean, boolean)} + */ List<MavenArtifact> resolveArtifacts( List<String> dependencyGAVs, Set<String> extraRepositories, boolean transitively, boolean useApacheSnapshots) diff --git a/tooling/camel-tooling-maven/src/main/java/org/apache/camel/tooling/maven/MavenDownloaderImpl.java b/tooling/camel-tooling-maven/src/main/java/org/apache/camel/tooling/maven/MavenDownloaderImpl.java index 599c30c69f3..efca4ed967d 100644 --- a/tooling/camel-tooling-maven/src/main/java/org/apache/camel/tooling/maven/MavenDownloaderImpl.java +++ b/tooling/camel-tooling-maven/src/main/java/org/apache/camel/tooling/maven/MavenDownloaderImpl.java @@ -31,6 +31,7 @@ import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Properties; import java.util.Set; import java.util.UUID; @@ -369,6 +370,15 @@ public class MavenDownloaderImpl extends ServiceSupport implements MavenDownload @Override public List<MavenArtifact> resolveArtifacts( + List<String> dependencyGAVs, + Set<String> extraRepositories, boolean transitively, boolean useApacheSnapshots) + throws MavenResolutionException { + return resolveArtifacts(null, dependencyGAVs, extraRepositories, transitively, useApacheSnapshots); + } + + @Override + public List<MavenArtifact> resolveArtifacts( + String rootGav, List<String> dependencyGAVs, Set<String> extraRepositories, boolean transitively, boolean useApacheSnapshots) throws MavenResolutionException { @@ -403,6 +413,14 @@ public class MavenDownloaderImpl extends ServiceSupport implements MavenDownload requests.add(ar); Dependency dependency = new Dependency(ar.getArtifact(), "compile", false); + if (Objects.nonNull(rootGav) && !rootGav.isEmpty()) { + MavenGav rootMavenGav = MavenGav.parseGav(depId); + Artifact rootArtifact = new DefaultArtifact( + rootMavenGav.getGroupId(), rootMavenGav.getArtifactId(), + rootMavenGav.getClassifier(), rootMavenGav.getPackaging(), + rootMavenGav.getVersion(), artifactTypeRegistry.get(rootMavenGav.getPackaging())); + collectRequest.setRoot(new Dependency(rootArtifact, "compile", false)); + } collectRequest.addDependency(dependency); //collectRequest.addManagedDependency(...); }