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));
+ }
}