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