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

apupier 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 a1e483c7e14 CAMEL-22227 - Fix Camel JBang update dependency for Spring 
Boot and Quarkus
a1e483c7e14 is described below

commit a1e483c7e14212cbef6e159b770a23a165e984bc
Author: AurĂ©lien Pupier <[email protected]>
AuthorDate: Tue Jul 15 11:32:40 2025 +0200

    CAMEL-22227 - Fix Camel JBang update dependency for Spring Boot and
    Quarkus
    
    - The major chunk is to take care of the correct directory and not
    assume the program is launched from the same level than the pom.xml is
    - Another point is to not pick the dependencies from dependency
    management. Thus, still need them for the Camel JBang Runtime Dependency
    command as it is looking to the bom for the version and runtime type, so
    introduced a parameter when computing the dependencies.
    - avoid setting `camel.main.routes-include-pattern` for Quarkus project.
    It was added when implementing Quarkus native support but I think the
    real needed value is the `quarkus.native.resources.includes` parameter.
    And it was causing trouble to Update command as it was not finding the
    specified Camel file in classpath
---
 .../dsl/jbang/core/commands/DependencyRuntime.java |  2 +-
 .../dsl/jbang/core/commands/ExportQuarkus.java     |  3 --
 .../apache/camel/dsl/jbang/core/commands/Run.java  |  9 ++--
 .../camel/dsl/jbang/core/commands/RunHelper.java   | 21 ++++++----
 .../jbang/core/commands/DependencyUpdateTest.java  | 48 +++++++++++++++++++++-
 .../camel/dsl/jbang/core/commands/ExportTest.java  |  9 ++--
 6 files changed, 68 insertions(+), 24 deletions(-)

diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyRuntime.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyRuntime.java
index a83333ee567..6c03611feb4 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyRuntime.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyRuntime.java
@@ -67,7 +67,7 @@ public class DependencyRuntime extends CamelCommand {
             return 0;
         }
 
-        List<String> deps = RunHelper.scanMavenDependenciesFromModel(pomXml, 
model);
+        List<String> deps = RunHelper.scanMavenDependenciesFromModel(pomXml, 
model, true);
         if (deps.isEmpty()) {
             return 0;
         }
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 91820ddbea3..ab652794e2e 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
@@ -207,9 +207,6 @@ class ExportQuarkus extends Export {
             if (sj.length() > 0) {
                 properties.setProperty("quarkus.native.resources.includes", 
sj.toString());
             }
-            if (routes != null) {
-                properties.setProperty("camel.main.routes-include-pattern", 
routes);
-            }
         }
 
         // CAMEL-20911 workaround due to a bug in CEQ 3.11 and 3.12
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 7b5542377e0..4139096e218 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
@@ -731,15 +731,16 @@ public class Run extends CamelCommand {
         }
 
         // if we only run pom.xml/build.gradle then auto discover from the 
Maven/Gradle based project
-        if (files.size() == 1 && ("pom.xml".equals(files.get(0)) || 
"build.gradle".equals(files.get(0)))) {
+        if (files.size() == 1 && (files.get(0).endsWith("pom.xml") || 
files.get(0).endsWith("build.gradle"))) {
+            Path projectDescriptorPath = Path.of(files.get(0));
             // use a better name when running
             if (name == null || "CamelJBang".equals(name)) {
-                name = RunHelper.mavenArtifactId();
+                name = RunHelper.mavenArtifactId(projectDescriptorPath);
             }
             // find source files
-            files = RunHelper.scanMavenOrGradleProject();
+            files = 
RunHelper.scanMavenOrGradleProject(projectDescriptorPath.getParent());
             // include extra dependencies from pom.xml
-            var pomDependencies = 
RunHelper.scanMavenDependenciesFromPom(Paths.get("pom.xml"));
+            var pomDependencies = 
RunHelper.scanMavenDependenciesFromPom(projectDescriptorPath);
             addDependencies(pomDependencies.toArray(new String[0]));
         }
 
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/RunHelper.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/RunHelper.java
index cfd8664634f..b8057f44cad 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/RunHelper.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/RunHelper.java
@@ -44,8 +44,7 @@ public final class RunHelper {
     private RunHelper() {
     }
 
-    public static String mavenArtifactId() {
-        Path pomPath = Paths.get("pom.xml");
+    public static String mavenArtifactId(Path pomPath) {
         if (Files.exists(pomPath) && Files.isRegularFile(pomPath)) {
             // find additional dependencies form pom.xml
             MavenXpp3Reader mavenReader = new MavenXpp3Reader();
@@ -77,12 +76,13 @@ public final class RunHelper {
     public static List<String> scanMavenDependenciesFromPom(Path pomPath) 
throws Exception {
         Model model = loadMavenModel(pomPath);
         if (model != null) {
-            return scanMavenDependenciesFromModel(pomPath, model);
+            return scanMavenDependenciesFromModel(pomPath, model, false);
         }
         return Collections.EMPTY_LIST;
     }
 
-    public static List<String> scanMavenDependenciesFromModel(Path pomPath, 
Model model) throws Exception {
+    public static List<String> scanMavenDependenciesFromModel(Path pomPath, 
Model model, boolean includeDependencyManagement)
+            throws Exception {
         String camelVersion = null;
         String camelSpringBootVersion = null;
         String springBootVersion = null;
@@ -116,9 +116,11 @@ public final class RunHelper {
                     } else if ("quarkus-bom".equals(a)) {
                         quarkusVersion = v;
                     }
-                    String gav = "mvn:" + g + ":" + a + ":" + v;
-                    if (!answer.contains(gav)) {
-                        answer.add(gav);
+                    if (includeDependencyManagement) {
+                        String gav = "mvn:" + g + ":" + a + ":" + v;
+                        if (!answer.contains(gav)) {
+                            answer.add(gav);
+                        }
                     }
                 }
             }
@@ -161,11 +163,12 @@ public final class RunHelper {
         return value;
     }
 
-    public static List<String> scanMavenOrGradleProject() {
+    public static List<String> scanMavenOrGradleProject(Path parentPath) {
         List<String> answer = new ArrayList<>();
 
         // scan as maven based project
-        Stream<Path> s = Stream.concat(walk(Path.of("src/main/java")), 
walk(Path.of("src/main/resources")));
+        Stream<Path> s = 
Stream.concat(walk(Path.of(parentPath.toFile().getAbsolutePath(), 
"src/main/java")),
+                walk(Path.of(parentPath.toFile().getAbsolutePath(), 
"src/main/resources")));
         s.filter(Files::isRegularFile)
                 .map(Path::toString)
                 .forEach(answer::add);
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyUpdateTest.java
 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyUpdateTest.java
index 8c24172389d..6873ae72cca 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyUpdateTest.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyUpdateTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.dsl.jbang.core.commands;
 
 import java.io.File;
+import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -34,6 +35,8 @@ import org.junit.jupiter.params.provider.Arguments;
 import org.junit.jupiter.params.provider.MethodSource;
 import picocli.CommandLine;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 class DependencyUpdateTest extends CamelCommandBaseTest {
 
     private File workingDir;
@@ -56,10 +59,51 @@ class DependencyUpdateTest extends CamelCommandBaseTest {
     @MethodSource("runtimeProvider")
     void shouldDependencyUpdate(RuntimeType rt) throws Exception {
         prepareMavenProject(rt);
-
         checkNoUpdateOnFreshlyGeneratedproject();
+        addArangodbToCamelFile();
+        checkOneDependencyAddedForArangoDb(rt);
+    }
+
+    private void checkOneDependencyAddedForArangoDb(RuntimeType rt) throws 
Exception, IOException {
+        StringPrinter secondUpdateCommandPrinter = new StringPrinter();
+        DependencyUpdate command = new DependencyUpdate(new 
CamelJBangMain().withPrinter(secondUpdateCommandPrinter));
+        CommandLine.populateCommand(command,
+                "--dir=" + workingDir,
+                new File(workingDir, "pom.xml").getAbsolutePath());
+        int exit = command.doCall();
+        Assertions.assertEquals(0, exit, 
secondUpdateCommandPrinter.getLines().toString());
+
+        List<String> lines = secondUpdateCommandPrinter.getLines();
+        Assertions.assertEquals(1, lines.size(), 
secondUpdateCommandPrinter.getLines().toString());
+        Assertions.assertEquals("Updating pom.xml with 1 dependency added", 
lines.get(0));
+
+        String pomContent = new String(Files.readAllBytes(new File(workingDir, 
"pom.xml").toPath()));
+        switch (rt) {
+            case quarkus: {
+                assertThat(pomContent).contains("camel-quarkus-arangodb");
+                break;
+            }
+            case springBoot: {
+                assertThat(pomContent).contains("camel-arangodb-starter");
+                break;
+            }
+            case main: {
+                assertThat(pomContent).contains("camel-arangodb<");
+                break;
+            }
+        }
+    }
 
-        //TODO: check content of pom.xml after a new component is provided
+    private void addArangodbToCamelFile() throws IOException {
+        File camelFile = new File(workingDir, 
"src/main/resources/camel/my.camel.yaml");
+        String camelFileContent = new 
String(Files.readAllBytes(camelFile.toPath()));
+        camelFileContent = camelFileContent.replace("- log: ${body}", """
+                - to:
+                             uri: arangodb
+                             parameters:
+                               database: demo
+                """);
+        Files.writeString(camelFile.toPath(), camelFileContent);
     }
 
     private void checkNoUpdateOnFreshlyGeneratedproject() throws Exception {
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 0d305507ade..f78e0d169dd 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
@@ -399,12 +399,11 @@ class ExportTest {
         try (FileInputStream fis = new FileInputStream(appProps)) {
             String content = IOHelper.loadText(fis);
             if (rt == RuntimeType.quarkus) {
-                
Assertions.assertTrue(content.contains("camel.main.routes-include-pattern=camel/route.yaml"),
-                        "should contain camel.main.routes-include-pattern 
property, was " + content);
-            } else {
-                
Assertions.assertFalse(content.contains("camel.main.routes-include-pattern"),
-                        "should not contain camel.main.routes-include-pattern 
property, was " + content);
+                
Assertions.assertTrue(content.contains("quarkus.native.resources.includes=camel/route.yaml"),
+                        "should contain quarkus.native.resources.includes 
property, was " + content);
             }
+            
Assertions.assertFalse(content.contains("camel.main.routes-include-pattern"),
+                    "should not contain camel.main.routes-include-pattern 
property, was " + content);
             if (rt == RuntimeType.springBoot) {
                 
Assertions.assertTrue(content.contains("camel.main.run-controller=true"),
                         "should contain camel.main.run-controller property, 
was " + content);

Reply via email to