This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch runq in repository https://gitbox.apache.org/repos/asf/camel.git
commit 93b315e1c63d25d58f1186b4670ad6175693ef2e Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Sat Apr 20 11:00:05 2024 +0200 CAMEL-19041: camel-jbang - Run with runtime for spring-boot and quarkus --- .../dsl/jbang/core/commands/ExportBaseCommand.java | 19 ++++++++++++++++++- .../org/apache/camel/dsl/jbang/core/commands/Run.java | 10 ++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java index 33dedbed9e3..c741b4e4db1 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java @@ -218,6 +218,8 @@ abstract class ExportBaseCommand extends CamelCommand { description = "Whether to ignore route loading and compilation errors (use this with care!)") protected boolean ignoreLoadingError; + protected boolean symbolicLink; // copy source files using symbolic link + public ExportBaseCommand(CamelJBangMain main) { super(main); } @@ -710,7 +712,7 @@ abstract class ExportBaseCommand extends CamelCommand { return "3.4.0"; } - protected static void safeCopy(File source, File target, boolean override) throws Exception { + protected void safeCopy(File source, File target, boolean override) throws Exception { if (!source.exists()) { return; } @@ -728,6 +730,21 @@ abstract class ExportBaseCommand extends CamelCommand { return; } + if (symbolicLink) { + try { + // must use absolute paths + Path link = target.toPath().toAbsolutePath(); + Path src = source.toPath().toAbsolutePath(); + if (Files.exists(link)) { + Files.delete(link); + } + Files.createSymbolicLink(link, src); + return; // success + } catch (IOException e) { + // ignore + } + } + if (!target.exists()) { Files.copy(source.toPath(), target.toPath()); } else if (override) { 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 e435f3c3f82..c1ae2853bb7 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 @@ -850,6 +850,7 @@ public class Run extends CamelCommand { protected int runQuarkus() throws Exception { // export to hidden folder ExportQuarkus eq = new ExportQuarkus(getMain()); + eq.symbolicLink = true; eq.quarkusVersion = this.quarkusVersion; eq.camelVersion = this.camelVersion; eq.kameletsVersion = this.kameletsVersion; @@ -904,6 +905,7 @@ public class Run extends CamelCommand { protected int runSpringBoot() throws Exception { // export to hidden folder ExportSpringBoot eq = new ExportSpringBoot(getMain()); + eq.symbolicLink = true; eq.springBootVersion = this.springBootVersion; eq.camelVersion = this.camelVersion; eq.camelSpringBootVersion = this.camelVersion; @@ -922,6 +924,10 @@ public class Run extends CamelCommand { } else { eq.dependencies += ",camel:cli-connector"; } + if (this.dev) { + // hot-reload of spring-boot + eq.dependencies += ",mvn:org.springframework.boot:spring-boot-devtools"; + } eq.fresh = this.fresh; eq.download = this.download; eq.quiet = true; @@ -933,7 +939,7 @@ public class Run extends CamelCommand { // TODO: run in unique sub folder // TODO: delete sub folder on exit // TODO: camel log from spring-boot/quarkus is not possible - // TODO: copy files using symbolic link so you can edit the file + // TODO: copy files using symbolic link so you can edit the file (TODO: application.properties) // TODO: camel stop does not stop quarkus correctly (spring boot do that) // TODO: camel get does not show Quarkus as platform (spring boot do that) @@ -942,7 +948,7 @@ public class Run extends CamelCommand { if (exit != 0) { return exit; } - // run quarkus via maven + // run spring-boot via maven ProcessBuilder pb = new ProcessBuilder(); pb.command(ExportBaseCommand.RUN_DIR + "/mvnw", "--quiet", "--file", ExportBaseCommand.RUN_DIR, "spring-boot:run");