You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2024/03/08 11:10:33 UTC
(camel) 01/01: CAMEL-20539: camel-jbang - Make it possible to turn off maven central so its easier to ensure all downloads can be done via maven proxy/mirror
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch central
in repository https://gitbox.apache.org/repos/asf/camel.git
commit b2edaadd8387819288326f072af9a2c18f2fee6f
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Mar 8 12:10:17 2024 +0100
CAMEL-20539: camel-jbang - Make it possible to turn off maven central so its easier to ensure all downloads can be done via maven proxy/mirror
---
.../modules/ROOT/pages/camel-jbang.adoc | 6 ++
.../apache/camel/dsl/jbang/core/commands/Run.java | 14 ++++
.../java/org/apache/camel/main/KameletMain.java | 26 ++++++++
.../camel/main/download/DependencyDownloader.java | 20 ++++++
.../main/download/MavenDependencyDownloader.java | 31 ++++++++-
.../camel/tooling/maven/MavenDownloader.java | 24 +++++++
.../camel/tooling/maven/MavenDownloaderImpl.java | 75 ++++++++++++++++------
7 files changed, 175 insertions(+), 21 deletions(-)
diff --git a/docs/user-manual/modules/ROOT/pages/camel-jbang.adoc b/docs/user-manual/modules/ROOT/pages/camel-jbang.adoc
index 25d0283e7f7..d50e92f81a4 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-jbang.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-jbang.adoc
@@ -3394,6 +3394,12 @@ The follow options related to _exporting_, can be configured in `application.pro
|`camel.jbang.mavenSettingsSecurity`
|Optional location of Maven settings-security.xml file to decrypt settings.xml
+|`camel.jbang.mavenCentralEnabled`
+|Whether downloading JARs from Maven Central repository is enabled
+
+|`camel.jbang.mavenApacheSnapshotEnabled`
+|Whether downloading JARs from ASF Maven Snapshot repository is enabled
+
|`camel.jbang.exportDir`
|Directory where the project will be exported
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
index 221259ad051..ee4a23b1bfc 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
@@ -167,6 +167,14 @@ public class Run extends CamelCommand {
description = "Optional location of Maven settings-security.xml file to decrypt settings.xml")
String mavenSettingsSecurity;
+ @Option(names = { "--maven-central-enabled" },
+ description = "Whether downloading JARs from Maven Central repository is enabled")
+ boolean mavenCentralEnabled = true;
+
+ @Option(names = { "--maven-apache-snapshot-enabled" },
+ description = "Whether downloading JARs from ASF Maven Snapshot repository is enabled")
+ boolean mavenApacheSnapshotEnabled = true;
+
@Option(names = { "--fresh" }, description = "Make sure we use fresh (i.e. non-cached) resources")
boolean fresh;
@@ -441,6 +449,8 @@ public class Run extends CamelCommand {
main.setFresh(fresh);
main.setMavenSettings(mavenSettings);
main.setMavenSettingsSecurity(mavenSettingsSecurity);
+ main.setMavenCentralEnabled(mavenCentralEnabled);
+ main.setMavenApacheSnapshotEnabled(mavenApacheSnapshotEnabled);
main.setDownloadListener(new RunDownloadListener());
main.setAppName("Apache Camel (JBang)");
@@ -858,6 +868,10 @@ public class Run extends CamelCommand {
repos = answer.getProperty("camel.jbang.repos", repos);
mavenSettings = answer.getProperty("camel.jbang.maven-settings", mavenSettings);
mavenSettingsSecurity = answer.getProperty("camel.jbang.maven-settings-security", mavenSettingsSecurity);
+ mavenCentralEnabled = "true"
+ .equals(answer.getProperty("camel.jbang.maven-central-enabled", mavenCentralEnabled ? "true" : "false"));
+ mavenApacheSnapshotEnabled = "true".equals(answer.getProperty("camel.jbang.maven-apache-snapshot-enabled",
+ mavenApacheSnapshotEnabled ? "true" : "false"));
openapi = answer.getProperty("camel.jbang.open-api", openapi);
download = "true".equals(answer.getProperty("camel.jbang.download", download ? "true" : "false"));
background = "true".equals(answer.getProperty("camel.jbang.background", background ? "true" : "false"));
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
index 5b51d0d6f78..b22fe375f9e 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
@@ -110,6 +110,8 @@ public class KameletMain extends MainCommandLineSupport {
private boolean verbose;
private String mavenSettings;
private String mavenSettingsSecurity;
+ boolean mavenCentralEnabled = true;
+ boolean mavenApacheSnapshotEnabled = true;
private String stubPattern;
private boolean silent;
private DownloadListener downloadListener;
@@ -267,6 +269,28 @@ public class KameletMain extends MainCommandLineSupport {
return downloadListener;
}
+ public boolean isMavenCentralEnabled() {
+ return mavenCentralEnabled;
+ }
+
+ /**
+ * Whether downloading JARs from Maven Central repository is enabled
+ */
+ public void setMavenCentralEnabled(boolean mavenCentralEnabled) {
+ this.mavenCentralEnabled = mavenCentralEnabled;
+ }
+
+ public boolean isMavenApacheSnapshotEnabled() {
+ return mavenApacheSnapshotEnabled;
+ }
+
+ /**
+ * Whether downloading JARs from ASF Maven Snapshot repository is enabled
+ */
+ public void setMavenApacheSnapshotEnabled(boolean mavenApacheSnapshotEnabled) {
+ this.mavenApacheSnapshotEnabled = mavenApacheSnapshotEnabled;
+ }
+
/**
* Sets a custom download listener
*/
@@ -384,6 +408,8 @@ public class KameletMain extends MainCommandLineSupport {
downloader.setFresh(fresh);
downloader.setMavenSettings(mavenSettings);
downloader.setMavenSettingsSecurity(mavenSettingsSecurity);
+ downloader.setMavenCentralEnabled(mavenCentralEnabled);
+ downloader.setMavenApacheSnapshotEnabled(mavenApacheSnapshotEnabled);
if (downloadListener != null) {
downloader.addDownloadListener(downloadListener);
}
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 d8917437293..d325513c6e9 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
@@ -87,6 +87,26 @@ public interface DependencyDownloader extends CamelContextAware, StaticService {
*/
void setMavenSettingsSecurity(String mavenSettingsSecurity);
+ /**
+ * Whether downloading JARs from Maven Central repository is enabled
+ */
+ boolean isMavenCentralEnabled();
+
+ /**
+ * Whether downloading JARs from Maven Central repository is enabled
+ */
+ void setMavenCentralEnabled(boolean mavenCentralEnabled);
+
+ /**
+ * Whether downloading JARs from ASF Maven Snapshot repository is enabled
+ */
+ boolean isMavenApacheSnapshotEnabled();
+
+ /**
+ * Whether downloading JARs from ASF Maven Snapshot repository is enabled
+ */
+ void setMavenApacheSnapshotEnabled(boolean mavenApacheSnapshotEnabled);
+
/**
* 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 4e8f113fb09..de93bfd112d 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
@@ -83,6 +83,9 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende
// settings.xml and settings-security.xml locations to be passed to MavenDownloader from camel-tooling-maven
private String mavenSettings;
private String mavenSettingsSecurity;
+ // to make it easy to turn off maven central/snapshot
+ boolean mavenCentralEnabled = true;
+ boolean mavenApacheSnapshotEnabled = true;
@Override
public CamelContext getCamelContext() {
@@ -187,6 +190,26 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende
this.mavenSettingsSecurity = mavenSettingsSecurity;
}
+ @Override
+ public boolean isMavenCentralEnabled() {
+ return mavenCentralEnabled;
+ }
+
+ @Override
+ public void setMavenCentralEnabled(boolean mavenCentralEnabled) {
+ this.mavenCentralEnabled = mavenCentralEnabled;
+ }
+
+ @Override
+ public boolean isMavenApacheSnapshotEnabled() {
+ return mavenApacheSnapshotEnabled;
+ }
+
+ @Override
+ public void setMavenApacheSnapshotEnabled(boolean mavenApacheSnapshotEnabled) {
+ this.mavenApacheSnapshotEnabled = mavenApacheSnapshotEnabled;
+ }
+
@Override
public void downloadDependency(String groupId, String artifactId, String version) {
downloadDependency(groupId, artifactId, version, true);
@@ -243,7 +266,7 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende
List<String> deps = List.of(gav);
// include Apache snapshot to make it easy to use upcoming releases
- boolean useApacheSnaphots = "org.apache.camel".equals(groupId) && version.contains("SNAPSHOT");
+ boolean useApacheSnapshots = "org.apache.camel".equals(groupId) && version.contains("SNAPSHOT");
// include extra repositories (if any) - these will be used in addition
// to the ones detected from ~/.m2/settings.xml and configured in
@@ -256,7 +279,7 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende
}
List<MavenArtifact> artifacts = resolveDependenciesViaAether(deps, extraRepositories,
- transitively, useApacheSnaphots);
+ transitively, useApacheSnapshots);
List<File> files = new ArrayList<>();
if (verbose) {
LOG.info("Resolved: {} -> [{}]", gav, artifacts);
@@ -480,6 +503,8 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende
MavenDownloaderImpl mavenDownloaderImpl = new MavenDownloaderImpl();
mavenDownloaderImpl.setMavenSettingsLocation(mavenSettings);
mavenDownloaderImpl.setMavenSettingsSecurityLocation(mavenSettingsSecurity);
+ mavenDownloaderImpl.setMavenCentralEnabled(mavenCentralEnabled);
+ mavenDownloaderImpl.setMavenApacheSnapshotEnabled(mavenApacheSnapshotEnabled);
mavenDownloaderImpl.setRepos(repos);
mavenDownloaderImpl.setFresh(fresh);
mavenDownloaderImpl.setOffline(!download);
@@ -534,7 +559,7 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende
try {
return mavenDownloader.resolveArtifacts(depIds, extraRepositories, transitively, useApacheSnapshots);
} catch (MavenResolutionException e) {
- String repos = e.getRepositories() == null
+ String repos = (e.getRepositories() == null || e.getRepositories().isEmpty())
? "(empty URL list)"
: String.join(", ", e.getRepositories());
String msg = "Cannot resolve dependencies in " + repos;
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 edae817ebb9..5dc197584bf 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
@@ -101,4 +101,28 @@ public interface MavenDownloader {
*/
void setRepositoryResolver(RepositoryResolver repositoryResolver);
+ /**
+ * Sets whether maven central repository should be included and as first in the list of repositories. This can be
+ * used to turn of maven central for users that may use their own maven proxy.
+ */
+ void setMavenCentralEnabled(boolean mavenCentralEnabled);
+
+ /**
+ * Sets whether maven central repository should be included and as first in the list of repositories. This can be
+ * used to turn of maven central for users that may use their own maven proxy.
+ */
+ boolean isMavenCentralEnabled();
+
+ /**
+ * Sets whether using SNAPSHOT versions of Apache Camel is enabled. If enabled then SNAPSHOT can be downloaded from
+ * the ASF SNAPSHOT maven repository.
+ */
+ void setMavenApacheSnapshotEnabled(boolean mavenApacheSnapshotEnabled);
+
+ /**
+ * Sets whether using SNAPSHOT versions of Apache Camel is enabled. If enabled then SNAPSHOT can be downloaded from
+ * the ASF SNAPSHOT maven repository.
+ */
+ boolean isMavenApacheSnapshotEnabled();
+
}
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 3851955f771..0870e35e55c 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
@@ -233,6 +233,9 @@ public class MavenDownloaderImpl extends ServiceSupport implements MavenDownload
private static final RepositoryPolicy POLICY_DISABLED = new RepositoryPolicy(
false, RepositoryPolicy.UPDATE_POLICY_NEVER, RepositoryPolicy.CHECKSUM_POLICY_IGNORE);
+ private boolean mavenCentralEnabled = true;
+ private boolean mavenApacheSnapshotEnabled = true;
+
private RepositoryResolver repositoryResolver;
private RepositorySystem repositorySystem;
@@ -326,9 +329,19 @@ public class MavenDownloaderImpl extends ServiceSupport implements MavenDownload
originalRepositories));
// mirroring/proxying Maven Central
- centralResolutionRepository = remoteRepositories.get(0);
+ if (centralRepository == null && !remoteRepositories.isEmpty()) {
+ for (RemoteRepository repo : remoteRepositories) {
+ if ("central".equals(repo.getId())) {
+ centralRepository = repo;
+ break;
+ } else if (repo.getHost().startsWith("repo1.maven.org") || repo.getHost().startsWith("repo2.maven.org")) {
+ centralRepository = repo;
+ break;
+ }
+ }
+ }
- if (!apacheSnapshotsIncluded) {
+ if (mavenApacheSnapshotEnabled && !apacheSnapshotsIncluded) {
// process apache snapshots even if it's not present in remoteRepositories, because it
// may be used on demand for each download/resolution request
apacheSnapshotsResolutionRepository = repositorySystem.newResolutionRepositories(repositorySystemSession,
@@ -371,7 +384,7 @@ public class MavenDownloaderImpl extends ServiceSupport implements MavenDownload
repositories.addAll(repositorySystem.newResolutionRepositories(repositorySystemSession,
extraRemoteRepositories));
}
- if (useApacheSnapshots && !apacheSnapshotsIncluded) {
+ if (mavenApacheSnapshotEnabled && useApacheSnapshots && !apacheSnapshotsIncluded) {
repositories.add(apacheSnapshotsResolutionRepository);
}
@@ -1171,18 +1184,22 @@ public class MavenDownloaderImpl extends ServiceSupport implements MavenDownload
// a set to prevent duplicates, but do not store URLs directly (hashCode() may lead to DNS resolution!)
Set<String> repositoryURLs = new HashSet<>();
- // add maven central first - always
- centralRepository = new RemoteRepository.Builder("central", "default", MAVEN_CENTRAL_REPO)
- .setReleasePolicy(defaultPolicy)
- .setSnapshotPolicy(POLICY_DISABLED)
- .build();
- repositories.add(centralRepository);
+ if (mavenCentralEnabled) {
+ // add maven central first - always
+ centralRepository = new RemoteRepository.Builder("central", "default", MAVEN_CENTRAL_REPO)
+ .setReleasePolicy(defaultPolicy)
+ .setSnapshotPolicy(POLICY_DISABLED)
+ .build();
+ repositories.add(centralRepository);
+ }
- // configure Apache snapshots - to be used if needed
- apacheSnapshotsRepository = new RemoteRepository.Builder("apache-snapshot", "default", APACHE_SNAPSHOT_REPO)
- .setReleasePolicy(POLICY_DISABLED)
- .setSnapshotPolicy(defaultPolicy)
- .build();
+ if (mavenApacheSnapshotEnabled) {
+ // configure Apache snapshots - to be used if needed
+ apacheSnapshotsRepository = new RemoteRepository.Builder("apache-snapshot", "default", APACHE_SNAPSHOT_REPO)
+ .setReleasePolicy(POLICY_DISABLED)
+ .setSnapshotPolicy(defaultPolicy)
+ .build();
+ }
// and custom repos and remember URLs to not duplicate the repositories from the settings
if (repos != null) {
@@ -1206,7 +1223,8 @@ public class MavenDownloaderImpl extends ServiceSupport implements MavenDownload
try {
URL url = new URL(r.getUrl());
if (repositoryURLs.add(r.getUrl())) {
- if (url.getHost().equals("repository.apache.org") && url.getPath().startsWith("/snapshots")) {
+ if (mavenApacheSnapshotEnabled && url.getHost().equals("repository.apache.org")
+ && url.getPath().startsWith("/snapshots")) {
// record that Apache Snapshots repository is included in default (always used)
// repositories and used preconfigured instance of o.e.aether.repository.RemoteRepository
apacheSnapshotsIncluded = true;
@@ -1252,7 +1270,7 @@ public class MavenDownloaderImpl extends ServiceSupport implements MavenDownload
/**
* Helper method to translate a collection of Strings for remote repository URLs into actual instances of
- * {@link RemoteRepository} added to the passed {@code repositories}. We don't detected duplicates here and we don't
+ * {@link RemoteRepository} added to the passed {@code repositories}. We don't detect duplicates here, and we don't
* do mirror/proxy processing of the repositories.
*/
private void configureRepositories(List<RemoteRepository> repositories, Set<String> urls) {
@@ -1260,11 +1278,12 @@ public class MavenDownloaderImpl extends ServiceSupport implements MavenDownload
try {
repo = repositoryResolver.resolveRepository(repo);
URL url = new URL(repo);
- if (url.getHost().equals("repo1.maven.org")) {
+ if (mavenCentralEnabled && url.getHost().equals("repo1.maven.org")) {
// Maven Central is always used, so skip it
return;
}
- if (url.getHost().equals("repository.apache.org") && url.getPath().contains("/snapshots")) {
+ if (mavenApacheSnapshotEnabled && url.getHost().equals("repository.apache.org")
+ && url.getPath().contains("/snapshots")) {
// Apache Snapshots added, so we'll use our own definition of this repository
repositories.add(apacheSnapshotsRepository);
} else {
@@ -1316,6 +1335,26 @@ public class MavenDownloaderImpl extends ServiceSupport implements MavenDownload
this.offline = offline;
}
+ @Override
+ public boolean isMavenCentralEnabled() {
+ return mavenCentralEnabled;
+ }
+
+ @Override
+ public void setMavenCentralEnabled(boolean mavenCentralEnabled) {
+ this.mavenCentralEnabled = mavenCentralEnabled;
+ }
+
+ @Override
+ public boolean isMavenApacheSnapshotEnabled() {
+ return mavenApacheSnapshotEnabled;
+ }
+
+ @Override
+ public void setMavenApacheSnapshotEnabled(boolean mavenApacheSnapshotEnabled) {
+ this.mavenApacheSnapshotEnabled = mavenApacheSnapshotEnabled;
+ }
+
private static class AcceptAllDependencyFilter implements DependencyFilter {
@Override
public boolean accept(DependencyNode node, List<DependencyNode> parents) {