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

commit 5b6978338e1cc3ab0b3c70545f1e074a5157809a
Author: Claus Ibsen <[email protected]>
AuthorDate: Tue Jun 14 17:16:14 2022 +0200

    CAMEL-18818: camel-jbang - Downloading from maven repos should setup for 
release vs snapshot repo.
---
 .../main/CommandLineDependencyDownloader.java      |  3 +-
 .../java/org/apache/camel/main/DependencyUtil.java | 54 ++++++++++++++++------
 .../org/apache/camel/main/DownloaderHelper.java    | 19 +++++---
 3 files changed, 54 insertions(+), 22 deletions(-)

diff --git 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/CommandLineDependencyDownloader.java
 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/CommandLineDependencyDownloader.java
index 54370b30ee1..b712d46af34 100644
--- 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/CommandLineDependencyDownloader.java
+++ 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/CommandLineDependencyDownloader.java
@@ -67,7 +67,8 @@ public class CommandLineDependencyDownloader extends 
ServiceSupport implements C
         if (!gavs.isEmpty()) {
             for (String gav : gavs) {
                 MavenGav mg = MavenGav.parseGav(camelContext, gav);
-                DownloaderHelper.downloadDependency(camelContext, repos, 
fresh, mg.getGroupId(), mg.getArtifactId(), mg.getVersion());
+                DownloaderHelper.downloadDependency(camelContext, repos, 
fresh, mg.getGroupId(), mg.getArtifactId(),
+                        mg.getVersion());
             }
         }
     }
diff --git 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyUtil.java
 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyUtil.java
index cdc962b5cfb..1608859de11 100644
--- 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyUtil.java
+++ 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyUtil.java
@@ -17,20 +17,22 @@
 package org.apache.camel.main;
 
 import java.io.File;
+import java.lang.reflect.Field;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.List;
 import java.util.stream.Collectors;
 
+import org.apache.camel.util.ReflectionHelper;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.repository.RepositoryPolicy;
 import org.jboss.shrinkwrap.resolver.api.ResolutionException;
-import org.jboss.shrinkwrap.resolver.api.maven.ConfigurableMavenResolverSystem;
 import org.jboss.shrinkwrap.resolver.api.maven.Maven;
 import org.jboss.shrinkwrap.resolver.api.maven.MavenFormatStage;
 import org.jboss.shrinkwrap.resolver.api.maven.MavenResolvedArtifact;
 import org.jboss.shrinkwrap.resolver.api.maven.MavenStrategyStage;
-import 
org.jboss.shrinkwrap.resolver.api.maven.repository.MavenRemoteRepositories;
-import 
org.jboss.shrinkwrap.resolver.api.maven.repository.MavenRemoteRepository;
-import org.jboss.shrinkwrap.resolver.api.maven.repository.MavenUpdatePolicy;
+import org.jboss.shrinkwrap.resolver.api.maven.MavenWorkingSession;
+import 
org.jboss.shrinkwrap.resolver.impl.maven.ConfigurableMavenResolverSystemImpl;
 
 final class DependencyUtil {
 
@@ -41,21 +43,45 @@ final class DependencyUtil {
             List<String> depIds, List<String> customRepos,
             boolean offline, boolean fresh, boolean transitively) {
 
-        ConfigurableMavenResolverSystem resolver = Maven.configureResolver()
-                .withMavenCentralRepo(true)
+        ConfigurableMavenResolverSystemImpl resolver = 
(ConfigurableMavenResolverSystemImpl) Maven.configureResolver()
+                .withMavenCentralRepo(false) // do not use central
                 .workOffline(offline);
 
         if (customRepos != null) {
-            for (int i = 0; i < customRepos.size(); i++) {
-                String repo = customRepos.get(i);
-                MavenRemoteRepository repository
-                        = 
MavenRemoteRepositories.createRemoteRepository("custom" + (i + 1), repo, 
"default");
-                if (fresh) {
-                    
repository.setUpdatePolicy(MavenUpdatePolicy.UPDATE_POLICY_ALWAYS);
+            int custom = 1;
+            for (String repo : customRepos) {
+                // shrikwrap does not have public API for adding release vs 
snapshot repos
+                // we need workaround using lower-level APIs and reflection
+                boolean snapshot = 
repo.equals(DownloaderHelper.APACHE_SNAPSHOT_REPO);
+                boolean central = 
repo.equals(DownloaderHelper.MAVEN_CENTRAL_REPO);
+                String update = fresh ? RepositoryPolicy.UPDATE_POLICY_ALWAYS 
: RepositoryPolicy.UPDATE_POLICY_NEVER;
+                RepositoryPolicy releasePolicy = new 
RepositoryPolicy(!snapshot, update, null);
+                RepositoryPolicy snapshotPolicy = new 
RepositoryPolicy(snapshot, update, null);
+
+                String id;
+                if (snapshot) {
+                    id = "apache-snapshot";
+                } else if (central) {
+                    id = "central";
                 } else {
-                    
repository.setUpdatePolicy(MavenUpdatePolicy.UPDATE_POLICY_NEVER);
+                    id = "custom" + custom++;
+                }
+                RemoteRepository rr = new RemoteRepository.Builder(id, 
"default", repo)
+                        .setReleasePolicy(releasePolicy)
+                        .setSnapshotPolicy(snapshotPolicy)
+                        .build();
+
+                MavenWorkingSession mws = resolver.getMavenWorkingSession();
+                try {
+                    Field f = 
mws.getClass().getDeclaredField("additionalRemoteRepositories");
+                    Object obj = ReflectionHelper.getField(f, mws);
+                    if (obj instanceof List) {
+                        List list = (List) obj;
+                        list.add(rr);
+                    }
+                } catch (Exception e) {
+                    // ignore
                 }
-                resolver.withRemoteRepo(repository);
             }
         }
 
diff --git 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloaderHelper.java
 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloaderHelper.java
index c928ccbc917..68de137e09c 100644
--- 
a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloaderHelper.java
+++ 
b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloaderHelper.java
@@ -33,6 +33,7 @@ import org.slf4j.LoggerFactory;
  */
 public final class DownloaderHelper {
 
+    public static final String MAVEN_CENTRAL_REPO = 
"https://repo1.maven.org/maven2/";;
     public static final String APACHE_SNAPSHOT_REPO = 
"https://repository.apache.org/snapshots";;
 
     private static final Logger LOG = 
LoggerFactory.getLogger(DownloaderHelper.class);
@@ -72,16 +73,20 @@ public final class DownloaderHelper {
         DOWNLOAD_THREAD_POOL.download(LOG, () -> {
             LOG.debug("Downloading: {}", gav);
             List<String> deps = List.of(gav);
-            List<String> customRepos = new ArrayList<>();
+            List<String> mavenRepos = new ArrayList<>();
 
-            // include Apache snapshot to make it easy to use upcoming release
-            if ("org.apache.camel".equals(groupId) && version != null && 
version.contains("SNAPSHOT")) {
-                customRepos.add(APACHE_SNAPSHOT_REPO);
-            }
+            // add maven central first
+            mavenRepos.add(MAVEN_CENTRAL_REPO);
+            // and custom repos
             if (repos != null) {
-                
customRepos.addAll(Arrays.stream(repos.split(",")).collect(Collectors.toList()));
+                
mavenRepos.addAll(Arrays.stream(repos.split(",")).collect(Collectors.toList()));
             }
-            List<MavenArtifact> artifacts = 
DependencyUtil.resolveDependenciesViaAether(deps, customRepos, false, fresh, 
true);
+            // include Apache snapshot to make it easy to use upcoming releases
+            if ("org.apache.camel".equals(groupId) && version != null && 
version.contains("SNAPSHOT")) {
+                mavenRepos.add(APACHE_SNAPSHOT_REPO);
+            }
+
+            List<MavenArtifact> artifacts = 
DependencyUtil.resolveDependenciesViaAether(deps, mavenRepos, false, fresh, 
true);
             LOG.debug("Resolved {} -> [{}]", gav, artifacts);
 
             DependencyDownloaderClassLoader classLoader

Reply via email to