This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new a4a7c24dedc CAMEL-22100: Uses parent module in plugin deps resolution
(#18154)
a4a7c24dedc is described below
commit a4a7c24dedce7a6c3b619941f7a0cb32d98a1691
Author: Marco Carletti <[email protected]>
AuthorDate: Thu May 22 11:51:12 2025 +0200
CAMEL-22100: Uses parent module in plugin deps resolution (#18154)
---
.../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 c6f9b1d834f..0f00bc887bf 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
@@ -140,7 +140,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 fec871a2ae4..597e856d28d 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 47bda5971e1..149f866103e 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) {
@@ -562,10 +574,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(...);
}