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 2023/03/06 08:26:39 UTC

[camel] branch camel-3.x updated: CAMEL-18983: camel-jbang - export - Add known maven repos such when using camel-jira.

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

davsclaus pushed a commit to branch camel-3.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-3.x by this push:
     new 0811758c6b2 CAMEL-18983: camel-jbang - export - Add known maven repos such when using camel-jira.
0811758c6b2 is described below

commit 0811758c6b22c4f7b055695aeda58ba678620880
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Mar 6 09:26:00 2023 +0100

    CAMEL-18983: camel-jbang - export - Add known maven repos such when using camel-jira.
---
 .../dsl/jbang/core/commands/ExportBaseCommand.java | 26 +++++++++++++++-------
 .../dsl/jbang/core/commands/ExportCamelMain.java   |  2 +-
 .../dsl/jbang/core/commands/ExportQuarkus.java     |  4 ++--
 .../dsl/jbang/core/commands/ExportSpringBoot.java  |  4 ++--
 .../apache/camel/dsl/jbang/core/commands/Run.java  |  9 ++++++++
 .../camel/main/download/DownloadListener.java      |  7 ++++++
 .../main/download/MavenDependencyDownloader.java   | 13 +++++++++--
 7 files changed, 50 insertions(+), 15 deletions(-)

diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
index 4016c4cc556..856b505707b 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
@@ -29,6 +29,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
+import java.util.StringJoiner;
 import java.util.TreeSet;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -472,23 +473,32 @@ abstract class ExportBaseCommand extends CamelCommand {
      * @param  camelVersion the camel version
      * @return              repositories or null if none are in use
      */
-    protected static String getMavenRepos(Properties prop, String camelVersion) {
-        String answer = prop.getProperty("camel.jbang.repos");
+    protected static String getMavenRepos(File settings, Properties prop, String camelVersion) throws Exception {
+        StringJoiner sj = new StringJoiner(",");
+
+        String repos = prop.getProperty("camel.jbang.repos");
+        if (repos != null) {
+            sj.add(repos);
+        }
 
         if (camelVersion == null) {
             camelVersion = new DefaultCamelCatalog().getCatalogVersion();
         }
-
         // include apache snapshot repo if we use SNAPSHOT version of Camel
         if (camelVersion.endsWith("-SNAPSHOT")) {
-            if (answer == null) {
-                answer = "https://repository.apache.org/content/groups/snapshots/";
-            } else if (!answer.contains("https://repository.apache.org/content/groups/snapshots/")) {
-                answer += ",https://repository.apache.org/content/groups/snapshots/";
+            sj.add("https://repository.apache.org/content/groups/snapshots/");
+        }
+
+        // there may be additional extra repositories
+        List<String> lines = Files.readAllLines(settings.toPath());
+        for (String line : lines) {
+            if (line.startsWith("repository=")) {
+                String r = StringHelper.after(line, "repository=");
+                sj.add(r);
             }
         }
 
-        return answer;
+        return sj.toString();
     }
 
     protected static boolean hasModeline(File settings) {
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java
index 73e6c079f52..fe86d723193 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java
@@ -141,7 +141,7 @@ class ExportCamelMain extends Export {
 
         Properties prop = new CamelCaseOrderedProperties();
         RuntimeUtil.loadProperties(prop, settings);
-        String repos = getMavenRepos(prop, camelVersion);
+        String repos = getMavenRepos(settings, prop, camelVersion);
         if (repos == null) {
             context = context.replaceFirst("\\{\\{ \\.MavenRepositories }}", "");
         } else {
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
index 6731c7528c8..923ddcee67f 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
@@ -224,7 +224,7 @@ class ExportQuarkus extends Export {
         Properties prop = new CamelCaseOrderedProperties();
         RuntimeUtil.loadProperties(prop, settings);
         // quarkus controls the camel version
-        String repos = getMavenRepos(prop, quarkusVersion);
+        String repos = getMavenRepos(settings, prop, quarkusVersion);
 
         CamelCatalog catalog = CatalogLoader.loadQuarkusCatalog(repos, quarkusVersion);
         if (camelVersion == null) {
@@ -333,7 +333,7 @@ class ExportQuarkus extends Export {
         Properties prop = new CamelCaseOrderedProperties();
         RuntimeUtil.loadProperties(prop, settings);
         // quarkus controls the camel version
-        String repos = getMavenRepos(prop, quarkusVersion);
+        String repos = getMavenRepos(settings, prop, quarkusVersion);
 
         CamelCatalog catalog = CatalogLoader.loadQuarkusCatalog(repos, quarkusVersion);
         if (camelVersion == null) {
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
index ef0264add9d..d91e804b140 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
@@ -143,7 +143,7 @@ class ExportSpringBoot extends Export {
 
         Properties prop = new CamelCaseOrderedProperties();
         RuntimeUtil.loadProperties(prop, settings);
-        String repos = getMavenRepos(prop, camelSpringBootVersion);
+        String repos = getMavenRepos(settings, prop, camelSpringBootVersion);
 
         CamelCatalog catalog = CatalogLoader.loadSpringBootCatalog(repos, camelSpringBootVersion);
         String camelVersion = catalog.getLoadedVersion();
@@ -256,7 +256,7 @@ class ExportSpringBoot extends Export {
 
         Properties prop = new CamelCaseOrderedProperties();
         RuntimeUtil.loadProperties(prop, settings);
-        String repos = getMavenRepos(prop, camelSpringBootVersion);
+        String repos = getMavenRepos(settings, prop, camelSpringBootVersion);
 
         CamelCatalog catalog = CatalogLoader.loadSpringBootCatalog(repos, camelSpringBootVersion);
         String camelVersion = catalog.getLoadedVersion();
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 de462ba942c..76a4f41f365 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
@@ -1045,6 +1045,7 @@ class Run extends CamelCommand {
 
     private class RunDownloadListener implements DownloadListener {
         final Set<String> downloaded = new HashSet<>();
+        final Set<String> repos = new HashSet<>();
         final Set<String> kamelets = new HashSet<>();
         final Set<String> modelines = new HashSet<>();
 
@@ -1066,6 +1067,14 @@ class Run extends CamelCommand {
             onDownloadDependency(groupId, artifactId, version);
         }
 
+        @Override
+        public void onExtraRepository(String repo) {
+            if (!repos.contains(repo)) {
+                writeSettings("repository", repo);
+                repos.add(repo);
+            }
+        }
+
         @Override
         public void onLoadingKamelet(String name) {
             if (!kamelets.contains(name)) {
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadListener.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadListener.java
index d9707c31197..842aa0c5ceb 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadListener.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadListener.java
@@ -33,6 +33,13 @@ public interface DownloadListener {
         // noop
     }
 
+    /**
+     * Some dependencies require third-party maven repositories to be downloaded.
+     */
+    default void onExtraRepository(String repo) {
+        // noop
+    }
+
     /**
      * Uses an existing already downloaded dependency
      */
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 5c812f28799..41a3b48ef9f 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
@@ -382,11 +382,13 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende
             if (!apacheSnapshotsIncluded && "org.apache.camel".equals(groupId) && version.contains("SNAPSHOT")) {
                 repositories.add(apacheSnapshots);
             }
+            List<RemoteRepository> extaRepositories = new ArrayList<>();
             // include extra repositories (if any)
-            repositories.addAll(resolveExtraRepositories(extraRepos));
+            extaRepositories.addAll(resolveExtraRepositories(extraRepos));
             // and from known extra repositories (if any)
             String known = knownReposResolver.getRepo(artifactId);
-            repositories.addAll(resolveExtraRepositories(known));
+            extaRepositories.addAll(resolveExtraRepositories(known));
+            repositories.addAll(extaRepositories);
 
             List<MavenArtifact> artifacts = resolveDependenciesViaAether(deps, repositories, transitively);
             List<File> files = new ArrayList<>();
@@ -417,6 +419,13 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende
                     listener.onDownloadedDependency(groupId, artifactId, version);
                 }
             }
+            if (!extaRepositories.isEmpty()) {
+                for (RemoteRepository repo : extaRepositories) {
+                    for (DownloadListener listener : downloadListeners) {
+                        listener.onExtraRepository(repo.getUrl());
+                    }
+                }
+            }
 
         }, gav);
     }