You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by fm...@apache.org on 2023/03/07 15:01:13 UTC

[camel] 07/08: 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.

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

commit cd020bc9330ee7d267d3bda393d19147f1c6d4b3
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   | 14 ++++++++++++
 7 files changed, 53 insertions(+), 13 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 ca607ec635a..b9a108a4885 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
@@ -31,6 +31,7 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.Properties;
 import java.util.Set;
+import java.util.StringJoiner;
 import java.util.TreeSet;
 import java.util.function.Function;
 import java.util.regex.Matcher;
@@ -498,23 +499,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 3303b0c8472..d25e7945322 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
@@ -142,7 +142,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 fd4bafaf3c3..0bc1edf443c 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
@@ -225,7 +225,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) {
@@ -334,7 +334,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 76519f658a2..3348211f2b3 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
@@ -144,7 +144,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);
 
@@ -283,7 +283,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 a543981cd9f..be238706898 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
@@ -1044,6 +1044,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<>();
 
@@ -1065,6 +1066,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 33d9841a97e..55a04316ce6 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
@@ -361,6 +361,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)
+            extaRepositories.addAll(resolveExtraRepositories(extraRepos));
+            // and from known extra repositories (if any)
+            String known = knownReposResolver.getRepo(artifactId);
+            extaRepositories.addAll(resolveExtraRepositories(known));
+            repositories.addAll(extaRepositories);
 
             List<MavenArtifact> artifacts = resolveDependenciesViaAether(deps, repositories, transitively);
             List<File> files = new ArrayList<>();
@@ -391,6 +398,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);
     }