This is an automated email from the ASF dual-hosted git repository. nfilotto pushed a commit to branch CAMEL-19949/camel-jbang-debug-port in repository https://gitbox.apache.org/repos/asf/camel.git
commit 6329bf4bb53b8356bd010ba0c8a750dfb97d2704 Author: Nicolas Filotto <nfilo...@talend.com> AuthorDate: Wed Oct 4 17:25:22 2023 +0200 CAMEL-19949: camel-jbang - Allow to set a custom JVM remote debugging port --- .../apache/camel/dsl/jbang/core/commands/Run.java | 49 ++++++++++++++++++---- 1 file changed, 41 insertions(+), 8 deletions(-) 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 ad0e0856925..ed52cda6e63 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 @@ -16,7 +16,7 @@ */ package org.apache.camel.dsl.jbang.core.commands; -import java.awt.*; +import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.UnsupportedFlavorException; @@ -166,8 +166,10 @@ public class Run extends CamelCommand { description = "Whether to allow automatic downloading JAR dependencies (over the internet)") boolean download = true; - @Option(names = { "--jvm-debug" }, defaultValue = "false", description = "To enable JVM remote debug on localhost:4004") - boolean jvmDebug; + @Option(names = { "--jvm-debug" }, parameterConsumer = DebugConsumer.class, paramLabel = "<true|false|port>", + description = "To enable JVM remote debugging on port 4004 by default. The supported values are true to " + + "enable the remote debugging, false to disable the remote debugging or a number to use a custom port") + int jvmDebugPort; @Option(names = { "--name" }, defaultValue = "CamelJBang", description = "The name of the Camel application") String name; @@ -300,6 +302,10 @@ public class Run extends CamelCommand { return run(); } + private boolean isDebugMode() { + return jvmDebugPort > 0; + } + private void writeSetting(KameletMain main, Properties existing, String key, String value) { String val = existing != null ? existing.getProperty(key, value) : value; if (val != null) { @@ -707,7 +713,7 @@ public class Run extends CamelCommand { } // okay we have validated all input and are ready to run - if (camelVersion != null || jvmDebug) { + if (camelVersion != null || isDebugMode()) { boolean custom = false; if (camelVersion != null) { // run in another JVM with different camel version (foreground or background) @@ -794,7 +800,7 @@ public class Run extends CamelCommand { openapi = answer.getProperty("camel.jbang.open-api", openapi); download = "true".equals(answer.getProperty("camel.jbang.download", download ? "true" : "false")); background = "true".equals(answer.getProperty("camel.jbang.background", background ? "true" : "false")); - jvmDebug = "true".equals(answer.getProperty("camel.jbang.jvmDebug", jvmDebug ? "true" : "false")); + jvmDebugPort = parseJvmDebugPort(answer.getProperty("camel.jbang.jvmDebug", Integer.toString(jvmDebugPort))); camelVersion = answer.getProperty("camel.jbang.camel-version", camelVersion); kameletsVersion = answer.getProperty("camel.jbang.kameletsVersion", kameletsVersion); gav = answer.getProperty("camel.jbang.gav", gav); @@ -808,6 +814,27 @@ public class Run extends CamelCommand { return answer; } + /** + * Parses the JVM debug port from the given value. + * <p/> + * The value can be {@code true} to indicate a default port which is {@code 4004}, {@code false} to indicate no + * debug, or a number corresponding to a custom port. + * + * @param value the value to parse. + * + * @return the JVM debug port corresponding to the given value. + */ + private static int parseJvmDebugPort(String value) { + if (value == null) { + return 0; + } else if (value.equalsIgnoreCase("true")) { + return 4004; + } else if (value.equalsIgnoreCase("false")) { + return 0; + } + return Integer.parseInt(value); + } + protected int runCamelVersion(KameletMain main) throws Exception { List<String> cmds = new ArrayList<>(spec.commandLine().getParseResult().originalArgs()); @@ -831,9 +858,9 @@ public class Run extends CamelCommand { if (kameletsVersion != null) { jbangArgs.add("-Dcamel-kamelets.version=" + kameletsVersion); } - if (jvmDebug) { - jbangArgs.add("--debug"); // jbang --debug - cmds.remove("--jvm-debug"); + if (isDebugMode()) { + jbangArgs.add("--debug=" + jvmDebugPort); // jbang --debug=port + cmds.removeIf(arg -> arg.startsWith("--jvm-debug")); } if (repos != null) { @@ -1375,4 +1402,10 @@ public class Run extends CamelCommand { } } + static class DebugConsumer extends ParameterConsumer<Run> { + @Override + protected void doConsumeParameters(Stack<String> args, Run cmd) { + cmd.jvmDebugPort = parseJvmDebugPort(args.pop()); + } + } }