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:32 UTC

(camel) branch central created (now b2edaadd838)

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a change to branch central
in repository https://gitbox.apache.org/repos/asf/camel.git


      at b2edaadd838 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 branch includes the following new commits:

     new b2edaadd838 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

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(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

Posted by da...@apache.org.
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) {