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(...);
         }

Reply via email to