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

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


The following commit(s) were added to refs/heads/camel-4.14.x by this push:
     new 9ad7ea93eae2 4.14.x: backport CAMEL-22521 (#19524)
9ad7ea93eae2 is described below

commit 9ad7ea93eae2c30f9d17b0bbd6634f6dcc7f1f1c
Author: Andrej Vaňo <[email protected]>
AuthorDate: Fri Oct 10 17:09:40 2025 +0200

    4.14.x: backport CAMEL-22521 (#19524)
    
    * fix(CAMEL-22521): jbang - Allow overriding quarkus gav from system 
properties
    
    * chore(checkstyle): Autogenerated changes
---
 .../camel/dsl/jbang/core/commands/Export.java      | 41 ++++++++++++++++++---
 .../dsl/jbang/core/commands/ExportSpringBoot.java  |  2 --
 .../apache/camel/dsl/jbang/core/commands/Run.java  | 11 +++---
 .../camel/dsl/jbang/core/common/CatalogLoader.java |  2 +-
 .../dsl/jbang/core/common/PropertyResolver.java    | 42 ++++++++++++++++++++++
 .../camel/dsl/jbang/core/common/VersionHelper.java | 28 ---------------
 .../camel/dsl/jbang/core/commands/ExportTest.java  | 37 ++++++++++++++++++-
 7 files changed, 122 insertions(+), 41 deletions(-)

diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java
index a60ebeb99c20..e5a2c4e4fa75 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java
@@ -27,17 +27,37 @@ import java.util.Date;
 import java.util.Properties;
 
 import org.apache.camel.dsl.jbang.core.common.CamelJBangConstants;
+import org.apache.camel.dsl.jbang.core.common.PropertyResolver;
 import org.apache.camel.dsl.jbang.core.common.RuntimeType;
 import org.apache.camel.dsl.jbang.core.common.RuntimeUtil;
 import org.apache.camel.dsl.jbang.core.common.SourceScheme;
-import org.apache.camel.dsl.jbang.core.common.VersionHelper;
 import org.apache.camel.tooling.maven.MavenGav;
 import org.apache.camel.util.CamelCaseOrderedProperties;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.IOHelper;
 import picocli.CommandLine.Command;
 
-import static org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.*;
+import static 
org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.BUILD_TOOL;
+import static 
org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.CAMEL_SPRING_BOOT_VERSION;
+import static 
org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.CAMEL_VERSION;
+import static 
org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.EXCLUDES;
+import static 
org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.EXPORT_DIR;
+import static org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.GAV;
+import static 
org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.GRADLE_WRAPPER;
+import static 
org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.JAVA_VERSION;
+import static 
org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.KAMELETS_VERSION;
+import static 
org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.LOCAL_KAMELET_DIR;
+import static 
org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.MAVEN_APACHE_SNAPSHOTS;
+import static 
org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.MAVEN_CENTRAL_ENABLED;
+import static 
org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.MAVEN_SETTINGS;
+import static 
org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.MAVEN_SETTINGS_SECURITY;
+import static 
org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.MAVEN_WRAPPER;
+import static 
org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.OPEN_API;
+import static 
org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.QUARKUS_ARTIFACT_ID;
+import static 
org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.QUARKUS_GROUP_ID;
+import static 
org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.QUARKUS_VERSION;
+import static org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.REPOS;
+import static 
org.apache.camel.dsl.jbang.core.common.CamelJBangConstants.SPRING_BOOT_VERSION;
 
 @Command(name = "export",
          description = "Export to other runtimes (Camel Main, Spring Boot, or 
Quarkus)", sortOptions = false,
@@ -82,6 +102,9 @@ public class Export extends ExportBaseCommand {
             doLoadAndInitProfileProperties(baseDir.resolve("application-" + 
profile + ".properties"));
         }
 
+        // property overrides from system properties for supported properties
+        overrideFromSystemProperties();
+
         if (runtime == null) {
             printer().printErr("The runtime option must be specified");
             return 1;
@@ -157,8 +180,7 @@ public class Export extends ExportBaseCommand {
             this.quarkusGroupId = props.getProperty(QUARKUS_GROUP_ID, 
this.quarkusGroupId);
             this.quarkusArtifactId = props.getProperty(QUARKUS_ARTIFACT_ID, 
this.quarkusArtifactId);
             this.quarkusVersion = props.getProperty(QUARKUS_VERSION, 
this.quarkusVersion);
-            this.camelSpringBootVersion = VersionHelper.getSpringBootVersion(
-                    () -> props.getProperty(CAMEL_SPRING_BOOT_VERSION, 
this.camelSpringBootVersion));
+            this.camelSpringBootVersion = 
props.getProperty(CAMEL_SPRING_BOOT_VERSION, this.camelSpringBootVersion);
             this.springBootVersion = props.getProperty(SPRING_BOOT_VERSION, 
this.springBootVersion);
             this.mavenWrapper
                     = "true".equals(props.getProperty(MAVEN_WRAPPER, 
this.mavenWrapper ? "true" : "false"));
@@ -178,6 +200,17 @@ public class Export extends ExportBaseCommand {
         }
     }
 
+    /**
+     * For supported fields prefer the values from system properties if they 
are defined.
+     */
+    private void overrideFromSystemProperties() {
+        this.quarkusGroupId = 
PropertyResolver.fromSystemProperty(QUARKUS_GROUP_ID, () -> 
this.quarkusGroupId);
+        this.quarkusArtifactId = 
PropertyResolver.fromSystemProperty(QUARKUS_ARTIFACT_ID, () -> 
this.quarkusArtifactId);
+        this.quarkusVersion = 
PropertyResolver.fromSystemProperty(QUARKUS_VERSION, () -> this.quarkusVersion);
+        this.camelSpringBootVersion
+                = 
PropertyResolver.fromSystemProperty(CAMEL_SPRING_BOOT_VERSION, () -> 
this.camelSpringBootVersion);
+    }
+
     protected Integer export(Path exportBaseDir, ExportBaseCommand cmd) throws 
Exception {
         // copy properties from this to cmd
         cmd.exportBaseDir = exportBaseDir;
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 22c3ef787879..cb5fdcd10f93 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
@@ -53,8 +53,6 @@ class ExportSpringBoot extends Export {
 
     @Override
     public Integer export() throws Exception {
-        this.camelSpringBootVersion = VersionHelper.getSpringBootVersion(null);
-
         String[] ids = gav.split(":");
         if (ids.length != 3) {
             printer().printErr("--gav must be in syntax: 
groupId:artifactId:version");
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 29170556f35d..7b6009a574bc 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
@@ -44,6 +44,7 @@ import org.apache.camel.catalog.DefaultCamelCatalog;
 import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
 import org.apache.camel.dsl.jbang.core.common.LoggingLevelCompletionCandidates;
 import org.apache.camel.dsl.jbang.core.common.Printer;
+import org.apache.camel.dsl.jbang.core.common.PropertyResolver;
 import org.apache.camel.dsl.jbang.core.common.RuntimeCompletionCandidates;
 import org.apache.camel.dsl.jbang.core.common.RuntimeType;
 import org.apache.camel.dsl.jbang.core.common.RuntimeTypeConverter;
@@ -1061,9 +1062,9 @@ public class Run extends CamelCommand {
         eq.symbolicLink = this.dev;
         eq.mavenWrapper = true;
         eq.gradleWrapper = false;
-        eq.quarkusVersion = this.quarkusVersion;
-        eq.quarkusGroupId = this.quarkusGroupId;
-        eq.quarkusArtifactId = this.quarkusArtifactId;
+        eq.quarkusVersion = 
PropertyResolver.fromSystemProperty(QUARKUS_VERSION, () -> this.quarkusVersion);
+        eq.quarkusGroupId = 
PropertyResolver.fromSystemProperty(QUARKUS_GROUP_ID, () -> 
this.quarkusGroupId);
+        eq.quarkusArtifactId = 
PropertyResolver.fromSystemProperty(QUARKUS_ARTIFACT_ID, () -> 
this.quarkusArtifactId);
         eq.camelVersion = this.camelVersion;
         eq.kameletsVersion = this.kameletsVersion;
         eq.exportDir = runDirPath.toString();
@@ -1109,7 +1110,7 @@ public class Run extends CamelCommand {
             mvnw = "/mvnw.cmd";
         }
         ProcessBuilder pb = new ProcessBuilder();
-        pb.command(runDirPath.toString() + mvnw, "--quiet", "--file",
+        pb.command(runDirPath + mvnw, "--quiet", "--file",
                 runDirPath.toRealPath().resolve("pom.xml").toString(), 
"package",
                 "quarkus:" + (dev ? "dev" : "run"));
 
@@ -1170,7 +1171,7 @@ public class Run extends CamelCommand {
         eq.gradleWrapper = false;
         eq.springBootVersion = this.springBootVersion;
         eq.camelVersion = this.camelVersion;
-        eq.camelSpringBootVersion = VersionHelper.getSpringBootVersion(
+        eq.camelSpringBootVersion = 
PropertyResolver.fromSystemProperty(CAMEL_SPRING_BOOT_VERSION,
                 () -> this.camelSpringBootVersion != null ? 
this.camelSpringBootVersion : this.camelVersion);
         eq.kameletsVersion = this.kameletsVersion;
         eq.exportDir = runDirPath.toString();
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java
index 6eab9328827b..56432636f791 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java
@@ -121,7 +121,7 @@ public final class CatalogLoader {
 
             final String camelVersion = version;
             ma = downloader.downloadArtifact("org.apache.camel.springboot", 
"camel-catalog-provider-springboot",
-                    VersionHelper.getSpringBootVersion(() -> camelVersion));
+                    
PropertyResolver.fromSystemProperty(CamelJBangConstants.CAMEL_SPRING_BOOT_VERSION,
 () -> camelVersion));
             if (ma != null) {
                 cl.addFile(ma.getFile());
             } else {
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PropertyResolver.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PropertyResolver.java
new file mode 100644
index 000000000000..fa78fadcc02a
--- /dev/null
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PropertyResolver.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.dsl.jbang.core.common;
+
+import java.util.function.Supplier;
+
+public final class PropertyResolver {
+    private PropertyResolver() {
+    }
+
+    /**
+     * Retrieves the value of the system property. if not defined, the 
fallback supplier is called.
+     *
+     * @param  property system property name
+     * @param  fallback supplier called when system property is not defined
+     * @return          system property value or fallback supplier value or 
null
+     */
+    public static String fromSystemProperty(String property, Supplier<String> 
fallback) {
+        if (System.getProperty(property) != null) {
+            return System.getProperty(property);
+        } else if (fallback != null) {
+            return fallback.get();
+        }
+
+        return null;
+    }
+
+}
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/VersionHelper.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/VersionHelper.java
index cb8c6c78bf77..b7832e95dc58 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/VersionHelper.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/VersionHelper.java
@@ -19,7 +19,6 @@ package org.apache.camel.dsl.jbang.core.common;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.function.Supplier;
 
 import org.apache.camel.util.StringHelper;
 
@@ -28,33 +27,6 @@ public final class VersionHelper {
     private VersionHelper() {
     }
 
-    /**
-     * Retrieves the Spring Boot version to use, with support for overriding 
via system property. This is particularly
-     * useful when the Camel version differs from the Camel Spring Boot 
version, allowing for explicit version control
-     * in JBang scenarios.
-     *
-     * <p>
-     * The method follows this precedence order:
-     * <ol>
-     * <li>System property {@code camel.jbang.camelSpringBootVersion} if 
set</li>
-     * <li>Value from the provided supplier if not null</li>
-     * <li>Returns null if neither option is available</li>
-     * </ol>
-     *
-     * @param  supplier a supplier that provides the default Spring Boot 
version when no system property override is
-     *                  present. May be null.
-     * @return          the Spring Boot version string, or null if no version 
can be determined
-     */
-    public static String getSpringBootVersion(Supplier<String> supplier) {
-        if (System.getProperty(CamelJBangConstants.CAMEL_SPRING_BOOT_VERSION) 
!= null) {
-            return 
System.getProperty(CamelJBangConstants.CAMEL_SPRING_BOOT_VERSION);
-        } else if (supplier != null) {
-            return supplier.get();
-        }
-
-        return null;
-    }
-
     public static String getJBangVersion() {
         try {
             // find actual version in JBANG_HOME
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
index 4ca3b0fd7c58..511d7311e3aa 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
@@ -28,6 +28,7 @@ import java.util.List;
 import java.util.Properties;
 import java.util.stream.Stream;
 
+import org.apache.camel.dsl.jbang.core.common.CamelJBangConstants;
 import org.apache.camel.dsl.jbang.core.common.RuntimeType;
 import org.apache.camel.util.IOHelper;
 import org.apache.maven.model.Dependency;
@@ -40,6 +41,7 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
 import org.junit.jupiter.params.provider.MethodSource;
+import org.junitpioneer.jupiter.SetSystemProperty;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import picocli.CommandLine;
@@ -117,7 +119,6 @@ class ExportTest {
                         assertThat(dep.getArtifactId()).isEqualTo("camel-bom");
                         assertThat(dep.getVersion()).isEqualTo("4.8.3");
                     });
-
         } else if (rt == RuntimeType.springBoot) {
             assertThat(model.getDependencyManagement().getDependencies())
                     .as("Expected to find dependencyManagement entry: 
org.apache.camel.springboot:camel-spring-boot-bom:4.8.3")
@@ -737,4 +738,38 @@ class ExportTest {
         Assertions.assertTrue(f.exists());
     }
 
+    @Test
+    @SetSystemProperty(key = CamelJBangConstants.CAMEL_SPRING_BOOT_VERSION, 
value = "4.10.0")
+    public void shouldOverrideSpringBootVersionFromSystemProperty() throws 
Exception {
+        LOG.info("shouldOverrideSpringBootVersionFromSystemProperty");
+        Export command = createCommand(RuntimeType.springBoot, new String[] { 
"classpath:route.yaml" },
+                "--gav=examples:route:1.0.0", "--dir=" + workingDir, 
"--quiet");
+        int exit = command.doCall();
+
+        Assertions.assertEquals(0, exit);
+        Model model = readMavenModel();
+        assertThat(model.getDependencyManagement().getDependencies())
+                .as("Expected to find dependencyManagement entry: 
org.apache.camel.springboot:camel-spring-boot-bom:4.10.0")
+                .anySatisfy(dep -> {
+                    
assertThat(dep.getGroupId()).isEqualTo("org.apache.camel.springboot");
+                    
assertThat(dep.getArtifactId()).isEqualTo("camel-spring-boot-bom");
+                    assertThat(dep.getVersion()).isEqualTo("4.10.0");
+                });
+    }
+
+    @Test
+    @SetSystemProperty(key = CamelJBangConstants.QUARKUS_VERSION, value = 
"3.26.0")
+    public void shouldOverrideQuarkusVersionFromSystemProperty() throws 
Exception {
+        LOG.info("shouldOverrideQuarkusVersionFromSystemProperty");
+
+        Export command = createCommand(RuntimeType.quarkus, new String[] { 
"classpath:route.yaml" },
+                "--gav=examples:route:1.0.0", "--dir=" + workingDir, 
"--quiet");
+        int exit = command.doCall();
+
+        Assertions.assertEquals(0, exit);
+
+        Model model = readMavenModel();
+        
assertThat(model.getProperties()).containsEntry("quarkus.platform.version",
+                System.getProperty(CamelJBangConstants.QUARKUS_VERSION));
+    }
 }

Reply via email to