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


The following commit(s) were added to refs/heads/main by this push:
     new 4d27866c91f CAMEL-18706: camel-jbang - Automatic include ASF snapshot 
repo if using SNAPSHOT jars
4d27866c91f is described below

commit 4d27866c91f456b003eead3987497a6158be409d
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Thu Nov 10 10:33:13 2022 +0100

    CAMEL-18706: camel-jbang - Automatic include ASF snapshot repo if using 
SNAPSHOT jars
---
 .../dsl/jbang/core/commands/ExportBaseCommand.java | 27 +++++++++++++
 .../dsl/jbang/core/commands/ExportCamelMain.java   | 10 ++++-
 .../dsl/jbang/core/commands/ExportQuarkus.java     | 38 ++++++++++++++-----
 .../dsl/jbang/core/commands/ExportSpringBoot.java  | 44 +++++++++++++---------
 .../resources/templates/apache-snapshot-maven.tmpl | 13 -------
 .../main/resources/templates/spring-boot-pom.tmpl  |  2 -
 .../camel-jbang-main/dist/CamelJBang.java          |  2 +-
 .../src/main/jbang/main/CamelJBang.java            |  2 +-
 .../main/download/MavenDependencyDownloader.java   |  2 +-
 9 files changed, 93 insertions(+), 47 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 f5ddd6967e0..88f7cb9aa90 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
@@ -33,6 +33,7 @@ import java.util.TreeSet;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
+import org.apache.camel.catalog.DefaultCamelCatalog;
 import org.apache.camel.dsl.jbang.core.common.RuntimeUtil;
 import org.apache.camel.main.download.MavenGav;
 import org.apache.camel.util.CamelCaseOrderedProperties;
@@ -451,6 +452,32 @@ abstract class ExportBaseCommand extends CamelCommand {
         return key + "=" + value;
     }
 
+    /**
+     * Gets the maven repositories
+     *
+     * @param  prop         settings
+     * @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");
+
+        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/";;
+            }
+        }
+
+        return answer;
+    }
+
     protected static void safeCopy(File source, File target, boolean override) 
throws Exception {
         if (!source.exists()) {
             return;
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 3dd641752bf..6647124f43e 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
@@ -138,7 +138,7 @@ class ExportCamelMain extends Export {
 
         Properties prop = new CamelCaseOrderedProperties();
         RuntimeUtil.loadProperties(prop, settings);
-        String repos = prop.getProperty("camel.jbang.repos");
+        String repos = getMavenRepos(prop, camelVersion);
         if (repos == null) {
             context = context.replaceFirst("\\{\\{ \\.MavenRepositories }}", 
"");
         } else {
@@ -149,6 +149,14 @@ class ExportCamelMain extends Export {
                 sb.append("        <repository>\n");
                 sb.append("            
<id>custom").append(i++).append("</id>\n");
                 sb.append("            <url>").append(repo).append("</url>\n");
+                if (repo.contains("snapshots")) {
+                    sb.append("            <releases>\n");
+                    sb.append("                <enabled>false</enabled>\n");
+                    sb.append("            </releases>\n");
+                    sb.append("            <snapshots>\n");
+                    sb.append("                <enabled>true</enabled>\n");
+                    sb.append("            </snapshots>\n");
+                }
                 sb.append("        </repository>\n");
             }
             sb.append("    </repositories>\n");
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 9bf218d6ea6..f996cf24302 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
@@ -175,7 +175,12 @@ class ExportQuarkus extends Export {
         String context = IOHelper.loadText(is);
         IOHelper.close(is);
 
-        CamelCatalog catalog = loadQuarkusCatalog();
+        Properties prop = new CamelCaseOrderedProperties();
+        RuntimeUtil.loadProperties(prop, settings);
+        // quarkus controls the camel version
+        String repos = getMavenRepos(prop, quarkusVersion);
+
+        CamelCatalog catalog = loadQuarkusCatalog(repos);
         if (camelVersion == null) {
             camelVersion = catalog.getCatalogVersion();
         }
@@ -190,16 +195,18 @@ class ExportQuarkus extends Export {
         context = context.replaceAll("\\{\\{ \\.JavaVersion }}", javaVersion);
         context = context.replaceAll("\\{\\{ \\.CamelVersion }}", 
camelVersion);
 
-        Properties prop = new CamelCaseOrderedProperties();
-        RuntimeUtil.loadProperties(prop, settings);
-        String repos = prop.getProperty("camel.jbang.repos");
         if (repos == null) {
             context = context.replaceFirst("\\{\\{ \\.MavenRepositories }}", 
"");
         } else {
             StringBuilder sb = new StringBuilder();
             for (String repo : repos.split(",")) {
                 sb.append("    maven {\n");
-                sb.append("        url: '").append(repo).append("'\n");
+                sb.append("        url '").append(repo).append("'\n");
+                if (repo.contains("snapshots")) {
+                    sb.append("        mavenContent {\n");
+                    sb.append("            snapshotsOnly()\n");
+                    sb.append("        }\n");
+                }
                 sb.append("    }\n");
             }
             context = context.replaceFirst("\\{\\{ \\.MavenRepositories }}", 
sb.toString());
@@ -276,7 +283,12 @@ class ExportQuarkus extends Export {
         String context = IOHelper.loadText(is);
         IOHelper.close(is);
 
-        CamelCatalog catalog = loadQuarkusCatalog();
+        Properties prop = new CamelCaseOrderedProperties();
+        RuntimeUtil.loadProperties(prop, settings);
+        // quarkus controls the camel version
+        String repos = getMavenRepos(prop, quarkusVersion);
+
+        CamelCatalog catalog = loadQuarkusCatalog(repos);
         if (camelVersion == null) {
             camelVersion = catalog.getCatalogVersion();
         }
@@ -290,9 +302,6 @@ class ExportQuarkus extends Export {
         context = context.replaceFirst("\\{\\{ \\.JavaVersion }}", 
javaVersion);
         context = context.replaceFirst("\\{\\{ \\.CamelVersion }}", 
camelVersion);
 
-        Properties prop = new CamelCaseOrderedProperties();
-        RuntimeUtil.loadProperties(prop, settings);
-        String repos = prop.getProperty("camel.jbang.repos");
         if (repos == null) {
             context = context.replaceFirst("\\{\\{ \\.MavenRepositories }}", 
"");
         } else {
@@ -303,6 +312,14 @@ class ExportQuarkus extends Export {
                 sb.append("        <repository>\n");
                 sb.append("            
<id>custom").append(i++).append("</id>\n");
                 sb.append("            <url>").append(repo).append("</url>\n");
+                if (repo.contains("snapshots")) {
+                    sb.append("            <releases>\n");
+                    sb.append("                <enabled>false</enabled>\n");
+                    sb.append("            </releases>\n");
+                    sb.append("            <snapshots>\n");
+                    sb.append("                <enabled>true</enabled>\n");
+                    sb.append("            </snapshots>\n");
+                }
                 sb.append("        </repository>\n");
             }
             sb.append("    </repositories>\n");
@@ -370,12 +387,13 @@ class ExportQuarkus extends Export {
         return answer;
     }
 
-    private CamelCatalog loadQuarkusCatalog() {
+    private CamelCatalog loadQuarkusCatalog(String repos) {
         CamelCatalog answer = new DefaultCamelCatalog(true);
 
         // use kamelet-main to dynamic download dependency via maven
         KameletMain main = new KameletMain();
         try {
+            main.setRepos(repos);
             main.start();
 
             // shrinkwrap does not return POM file as result (they are 
hardcoded to be filtered out)
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 50e63f67092..4a31edff20c 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,11 @@ class ExportSpringBoot extends Export {
 
         String context = 
readResourceTemplate("templates/spring-boot-pom.tmpl");
 
-        CamelCatalog catalog = loadSpringBootCatalog(camelSpringBootVersion);
+        Properties prop = new CamelCaseOrderedProperties();
+        RuntimeUtil.loadProperties(prop, settings);
+        String repos = getMavenRepos(prop, camelSpringBootVersion);
+
+        CamelCatalog catalog = loadSpringBootCatalog(repos, 
camelSpringBootVersion);
         String camelVersion = catalog.getLoadedVersion();
 
         context = context.replaceFirst("\\{\\{ \\.GroupId }}", ids[0]);
@@ -166,10 +170,6 @@ class ExportSpringBoot extends Export {
         context = context.replaceFirst(Pattern.quote("{{ .jkubeProperties }}"),
                 Matcher.quoteReplacement(sbJKube.toString()));
 
-        Properties prop = new CamelCaseOrderedProperties();
-        RuntimeUtil.loadProperties(prop, settings);
-
-        String repos = prop.getProperty("camel.jbang.repos");
         if (repos == null) {
             context = context.replaceFirst("\\{\\{ \\.MavenRepositories }}", 
"");
         } else {
@@ -180,6 +180,14 @@ class ExportSpringBoot extends Export {
                 sb.append("        <repository>\n");
                 sb.append("            
<id>custom").append(i++).append("</id>\n");
                 sb.append("            <url>").append(repo).append("</url>\n");
+                if (repo.contains("snapshots")) {
+                    sb.append("            <releases>\n");
+                    sb.append("                <enabled>false</enabled>\n");
+                    sb.append("            </releases>\n");
+                    sb.append("            <snapshots>\n");
+                    sb.append("                <enabled>true</enabled>\n");
+                    sb.append("            </snapshots>\n");
+                }
                 sb.append("        </repository>\n");
             }
             sb.append("    </repositories>\n");
@@ -233,13 +241,6 @@ class ExportSpringBoot extends Export {
         }
         context = context.replaceFirst("\\{\\{ \\.CamelDependencies }}", 
sb.toString());
 
-        // add apache snapshot repository if camel version ends with SNAPSHOT
-        String contextSnapshot = "";
-        if (camelVersion.endsWith("SNAPSHOT")) {
-            contextSnapshot = 
readResourceTemplate("templates/apache-snapshot-maven.tmpl");
-        }
-        context = context.replaceFirst(Pattern.quote("{{ .snapshotRepository 
}}"), Matcher.quoteReplacement(contextSnapshot));
-
         // add jkube profiles if there is jkube version property
         String jkubeProfiles = "";
         if (allProps.getProperty("jkube.version") != null) {
@@ -255,7 +256,11 @@ class ExportSpringBoot extends Export {
 
         String context = 
readResourceTemplate("templates/spring-boot-build-gradle.tmpl");
 
-        CamelCatalog catalog = loadSpringBootCatalog(camelSpringBootVersion);
+        Properties prop = new CamelCaseOrderedProperties();
+        RuntimeUtil.loadProperties(prop, settings);
+        String repos = getMavenRepos(prop, camelSpringBootVersion);
+
+        CamelCatalog catalog = loadSpringBootCatalog(repos, 
camelSpringBootVersion);
         String camelVersion = catalog.getLoadedVersion();
 
         context = context.replaceFirst("\\{\\{ \\.GroupId }}", ids[0]);
@@ -265,16 +270,18 @@ class ExportSpringBoot extends Export {
         context = context.replaceFirst("\\{\\{ \\.JavaVersion }}", 
javaVersion);
         context = context.replaceAll("\\{\\{ \\.CamelVersion }}", 
camelVersion);
 
-        Properties prop = new CamelCaseOrderedProperties();
-        RuntimeUtil.loadProperties(prop, settings);
-        String repos = prop.getProperty("camel.jbang.repos");
         if (repos == null) {
             context = context.replaceFirst("\\{\\{ \\.MavenRepositories }}", 
"");
         } else {
             StringBuilder sb = new StringBuilder();
             for (String repo : repos.split(",")) {
                 sb.append("    maven {\n");
-                sb.append("        url: '").append(repo).append("'\n");
+                sb.append("        url '").append(repo).append("'\n");
+                if (repo.contains("snapshots")) {
+                    sb.append("        mavenContent {\n");
+                    sb.append("            snapshotsOnly()\n");
+                    sb.append("        }\n");
+                }
                 sb.append("    }\n");
             }
             context = context.replaceFirst("\\{\\{ \\.MavenRepositories }}", 
sb.toString());
@@ -365,7 +372,7 @@ class ExportSpringBoot extends Export {
         return super.applicationPropertyLine(key, value);
     }
 
-    private CamelCatalog loadSpringBootCatalog(String version) throws 
Exception {
+    private CamelCatalog loadSpringBootCatalog(String repos, String version) 
throws Exception {
         CamelCatalog answer = new DefaultCamelCatalog();
         if (version == null) {
             version = answer.getCatalogVersion();
@@ -374,6 +381,7 @@ class ExportSpringBoot extends Export {
         // use kamelet-main to dynamic download dependency via maven
         KameletMain main = new KameletMain();
         try {
+            main.setRepos(repos);
             main.start();
 
             // wrap downloaded catalog files in an isolated classloader
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/apache-snapshot-maven.tmpl
 
b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/apache-snapshot-maven.tmpl
deleted file mode 100644
index 251e3f10ffa..00000000000
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/apache-snapshot-maven.tmpl
+++ /dev/null
@@ -1,13 +0,0 @@
-    <repositories>
-        <repository>
-            <id>apache.snapshots</id>
-            <name>Apache Development Snapshot Repository</name>
-            
<url>https://repository.apache.org/content/repositories/snapshots/</url>
-            <releases>
-                <enabled>false</enabled>
-            </releases>
-            <snapshots>
-                <enabled>true</enabled>
-            </snapshots>
-        </repository>
-    </repositories>
\ No newline at end of file
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-pom.tmpl
 
b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-pom.tmpl
index 18a185a7415..361297da6b6 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-pom.tmpl
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-pom.tmpl
@@ -83,8 +83,6 @@
         </plugins>
     </build>
 
-{{ .snapshotRepository }}
-
 {{ .jkubeProfiles }}
 
 </project>
diff --git a/dsl/camel-jbang/camel-jbang-main/dist/CamelJBang.java 
b/dsl/camel-jbang/camel-jbang-main/dist/CamelJBang.java
index a927980ab79..c51f7952913 100755
--- a/dsl/camel-jbang/camel-jbang-main/dist/CamelJBang.java
+++ b/dsl/camel-jbang/camel-jbang-main/dist/CamelJBang.java
@@ -18,7 +18,7 @@
  */
 
 //JAVA 11+
-//REPOS mavencentral,apache=https://repository.apache.org/snapshots
+//REPOS 
mavencentral,apache-snapshot=http://repository.apache.org/content/groups/snapshots/
 //DEPS org.apache.camel:camel-bom:${camel.jbang.version:3.19.0}@pom
 //DEPS org.apache.camel:camel-jbang-core:${camel.jbang.version:3.19.0}
 //DEPS org.apache.camel.kamelets:camel-kamelets:${camel-kamelets.version:0.9.3}
diff --git 
a/dsl/camel-jbang/camel-jbang-main/src/main/jbang/main/CamelJBang.java 
b/dsl/camel-jbang/camel-jbang-main/src/main/jbang/main/CamelJBang.java
index a927980ab79..c51f7952913 100755
--- a/dsl/camel-jbang/camel-jbang-main/src/main/jbang/main/CamelJBang.java
+++ b/dsl/camel-jbang/camel-jbang-main/src/main/jbang/main/CamelJBang.java
@@ -18,7 +18,7 @@
  */
 
 //JAVA 11+
-//REPOS mavencentral,apache=https://repository.apache.org/snapshots
+//REPOS 
mavencentral,apache-snapshot=http://repository.apache.org/content/groups/snapshots/
 //DEPS org.apache.camel:camel-bom:${camel.jbang.version:3.19.0}@pom
 //DEPS org.apache.camel:camel-jbang-core:${camel.jbang.version:3.19.0}
 //DEPS org.apache.camel.kamelets:camel-kamelets:${camel-kamelets.version:0.9.3}
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 b8a29a8b27f..eaf5ecba2d5 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
@@ -1094,7 +1094,7 @@ public class MavenDependencyDownloader extends 
ServiceSupport implements Depende
                     String id = "custom" + customCount++;
                     RepositoryPolicy releasePolicy = fresh ? POLICY_FRESH : 
POLICY_DEFAULT;
                     if (repositoryURLs.add(url)) {
-                        if (url.getHost().equals("repository.apache.org") && 
url.getPath().startsWith("/snapshots")) {
+                        if (url.getHost().equals("repository.apache.org") && 
url.getPath().contains("/snapshots")) {
                             apacheSnapshotsIncluded = true;
                             repositories.add(apacheSnapshots);
                         } else {

Reply via email to