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

davsclaus pushed a commit to branch CAMEL-26848-export-property-override
in repository https://gitbox.apache.org/repos/asf/camel.git

commit d866799944c9a16c19a24c63fef34f65fb657d99
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Nov 11 15:07:28 2026 +0100

    CAMEL-26848: camel-jbang - camel export: a --property value overrides the 
key of application.properties again
    
    CAMEL-26848 kept a key of the application.properties that the run settings
    repeat, but the run settings also carry the --property values, so a
    --property override of such a key was lost 
(ExportMainApplicationPropertiesTest,
    enabled by CAMEL-26855, fails on main).
    
    Co-Authored-By: Claude Opus 5.5 <[email protected]>
    Signed-off-by: Claus Ibsen <[email protected]>
---
 .../camel/dsl/jbang/run/export/Exporter.java       |  4 ++-
 .../dsl/jbang/run/export/ProjectExporterTest.java  | 33 ++++++++++++++++++++++
 2 files changed, 36 insertions(+), 1 deletion(-)

diff --git 
a/dsl/camel-jbang/camel-jbang-run/src/main/java/org/apache/camel/dsl/jbang/run/export/Exporter.java
 
b/dsl/camel-jbang/camel-jbang-run/src/main/java/org/apache/camel/dsl/jbang/run/export/Exporter.java
index 319c079bff7d..60d77a598d4b 100644
--- 
a/dsl/camel-jbang/camel-jbang-run/src/main/java/org/apache/camel/dsl/jbang/run/export/Exporter.java
+++ 
b/dsl/camel-jbang/camel-jbang-run/src/main/java/org/apache/camel/dsl/jbang/run/export/Exporter.java
@@ -835,6 +835,7 @@ abstract class Exporter {
         appProps.putAll(profileProps);
         profileProps.putAll(settingsProps);
         prepareApplicationProperties(profileProps);
+        Map<String, String> userValues = 
propertiesMap(request.applicationProperties);
 
         for (Map.Entry<Object, Object> entry : settingsProps.entrySet()) {
             String key = entry.getKey().toString();
@@ -843,7 +844,8 @@ abstract class Exporter {
                     || "camel.main.routesReloadEnabled".equals(key);
             if (skip && appProps.containsKey(key)) {
                 // a key of the application.properties is kept, as a route may 
refer to it: {{camel.server.port}}
-                profileProps.put(key, appProps.get(key));
+                // and a value given with --property overrides the one of the 
application.properties
+                profileProps.put(key, userValues.getOrDefault(key, 
appProps.getProperty(key)));
             } else if (skip) {
                 profileProps.remove(key);
             }
diff --git 
a/dsl/camel-jbang/camel-jbang-run/src/test/java/org/apache/camel/dsl/jbang/run/export/ProjectExporterTest.java
 
b/dsl/camel-jbang/camel-jbang-run/src/test/java/org/apache/camel/dsl/jbang/run/export/ProjectExporterTest.java
index 16ae4e91933f..36d08d729f9d 100644
--- 
a/dsl/camel-jbang/camel-jbang-run/src/test/java/org/apache/camel/dsl/jbang/run/export/ProjectExporterTest.java
+++ 
b/dsl/camel-jbang/camel-jbang-run/src/test/java/org/apache/camel/dsl/jbang/run/export/ProjectExporterTest.java
@@ -121,6 +121,39 @@ class ProjectExporterTest {
                 .doesNotContain("camel.component.properties.location");
     }
 
+    @Test
+    void propertyOverridesTheKeyOfTheApplicationProperties() throws Exception {
+        Path route = writeRoute("shop");
+        Files.writeString(dir.resolve("application.properties"), """
+                order.period=1000
+                camel.server.port=8080
+                """);
+        // camel run puts the --property values in the run settings
+        DependencyResolver overriding = r -> {
+            Path settings = r.workDir.resolve(ExportHelper.RUN_SETTINGS_FILE);
+            Files.createDirectories(settings.getParent());
+            Files.writeString(settings, """
+                    camel.main.routesIncludePattern=file:%s
+                    camel.server.port=9090
+                    dependency=camel:timer
+                    """.formatted(r.files.get(0)));
+            return 0;
+        };
+        Path exportDir = dir.resolve("export");
+        ExportRequest request = request(route, exportDir);
+        request.baseDir = dir;
+        request.applicationProperties = new String[] { 
"camel.server.port=9090" };
+
+        StringPrinter printer = new StringPrinter();
+        int exit = new ProjectExporter(new 
ExportContext().withPrinter(printer).withDependencyResolver(overriding))
+                .export(request);
+
+        assertThat(exit).as(printer.getOutput()).isZero();
+        
assertThat(exportDir.resolve("src/main/resources/application.properties")).content()
+                .contains("order.period=1000", "camel.server.port=9090")
+                .doesNotContain("camel.server.port=8080");
+    }
+
     @Test
     void exportsInParallelWithWorkDirsOfTheirOwn() throws Exception {
         List<String> before = listWorkDir();

Reply via email to