You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/10/03 09:58:06 UTC
[camel] branch main updated: CAMEL-19932: camel-jbang - Run/Transform from existing maven based structure
This is an automated email from the ASF dual-hosted git repository.
davsclaus 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 d1d8a5ed9a1 CAMEL-19932: camel-jbang - Run/Transform from existing maven based structure
d1d8a5ed9a1 is described below
commit d1d8a5ed9a1796cc6f823879c18122b97afa6a6e
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Oct 3 11:57:37 2023 +0200
CAMEL-19932: camel-jbang - Run/Transform from existing maven based structure
---
.../modules/ROOT/pages/camel-jbang.adoc | 25 ++++++++++++++++
.../apache/camel/dsl/jbang/core/commands/Run.java | 34 ++++++++++++++++++++++
2 files changed, 59 insertions(+)
diff --git a/docs/user-manual/modules/ROOT/pages/camel-jbang.adoc b/docs/user-manual/modules/ROOT/pages/camel-jbang.adoc
index 27feb9c33ea..f3ab6737ffb 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-jbang.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-jbang.adoc
@@ -185,6 +185,31 @@ camel run *
TIP: The run goal can also detect files that are `properties`, such as `application.properties`.
+=== Running a Maven or Gradle based project
+
+Camel JBang is intended for flat-file based projects, where you run small integrations.
+However, Camel JBang may be used as a tool for migrating existing Maven or Gradle based projects.
+To make the migration easier, then JBang can do _best effort_ to run, export, or transform these projects.
+
+For example if you have a Maven based project, you can execute
+
+[source,bash]
+----
+camel run pom.xml
+----
+
+or for a Gradle project
+
+[source,bash]
+----
+camel run build.gradle
+----
+
+Camel JBang will then scan in `src/main/java` and `src/main/resources` for files to include (recursive).
+
+NOTE: Using `camel run pom.xml` is not intended as a fully compatible way of running an existing Maven based project.
+
+
=== Running Route from input parameter
For very small Java routes then it is possible to provide the route as CLI argument, as shown below:
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 fd5ce4e3b94..cec9bdfe5e2 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 java.util.function.Supplier;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -515,6 +516,11 @@ public class Run extends CamelCommand {
files.add(OPENAPI_GENERATED_FILE);
}
+ // 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)))) {
+ files = scanMavenOrGradleProject();
+ }
+
for (String file : files) {
if (file.startsWith("clipboard") && !(new File(file).exists())) {
file = loadFromClipboard(file);
@@ -709,6 +715,28 @@ public class Run extends CamelCommand {
}
}
+ private static List<String> scanMavenOrGradleProject() {
+ 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")));
+ s.filter(p -> p.toFile().isFile())
+ .map(p -> p.toFile().getPath())
+ .forEach(answer::add);
+ return answer;
+ }
+
+ public static Stream<Path> walk(Path dir) {
+ try {
+ if (Files.isDirectory(dir)) {
+ return Files.walk(dir);
+ } else {
+ return Stream.empty();
+ }
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
protected void doAddInitialProperty(KameletMain main) {
// noop
}
@@ -1157,6 +1185,9 @@ public class Run extends CamelCommand {
}
private boolean skipFile(String name) {
+ // flatten file
+ name = FileUtil.stripPath(name);
+
if (OPENAPI_GENERATED_FILE.equals(name)) {
return false;
}
@@ -1173,6 +1204,9 @@ public class Run extends CamelCommand {
|| "compose.yaml".equals(name)) {
return true;
}
+ if (name.equals("NOTICE.txt") || name.equals("LICENSE.txt")) {
+ return true;
+ }
if (name.startsWith(".")) {
// relative file is okay, otherwise we assume it's a hidden file