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
