This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch wc in repository https://gitbox.apache.org/repos/asf/camel.git
commit e34e72ccc4e4d3541e73b2582b7b4aa57c8ecc28 Author: Claus Ibsen <[email protected]> AuthorDate: Wed May 6 17:08:30 2026 +0200 CAMEL-23438: camel-jbang - Wrapper to install scripts as camel instead of camelw --- .../ROOT/pages/camel-4x-upgrade-guide-4_21.adoc | 5 ++++ .../pages/jbang-commands/camel-jbang-wrapper.adoc | 1 + .../META-INF/camel-jbang-commands-metadata.json | 2 +- .../dsl/jbang/core/commands/WrapperCommand.java | 24 ++++++++------- .../jbang/core/commands/WrapperCommandTest.java | 34 ++++++++++++++++++---- 5 files changed, 50 insertions(+), 16 deletions(-) diff --git a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc index acfd903d8a75..7e42bfa2cdd4 100644 --- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc +++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc @@ -36,6 +36,11 @@ Previously these nodes were flattened to the same level as their parent `choice` with the tree structure exposed by `getChildren()`. This affects level values reported via JMX (`ManagedProcessor.getLevel()`) and dev consoles for nodes inside Choice EIP branches. +=== camel-jbang + +The `camel wrapper` command now installs the scripts as `camel` instead of `camelw`. +You can use the `--command-name=camelw` to use the old name. + === camel-yaml-dsl A new canonical JSON Schema variant (`camelYamlDsl-canonical.json`) has been added alongside the existing classic diff --git a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-wrapper.adoc b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-wrapper.adoc index 85299e1738df..403c1efd1ef0 100644 --- a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-wrapper.adoc +++ b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-wrapper.adoc @@ -20,6 +20,7 @@ camel wrapper [options] |=== | Option | Description | Default | Type | `--camel-version` | Camel version to pin (defaults to current version) | | String +| `--command-name` | The name of the command to use (camel or camelw) | camel | String | `--dir,--directory` | Directory where wrapper files will be created | . | String | `--repo-url` | Maven repository URL for downloading the launcher | DEFAULT_REPO_URL | String | `-h,--help` | Display the help and sub-commands | | boolean diff --git a/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json b/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json index 77069a1e6a8b..94f962fd266c 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json +++ b/dsl/camel-jbang/camel-jbang-core/src/generated/resources/META-INF/camel-jbang-commands-metadata.json @@ -32,6 +32,6 @@ { "name": "transform", "fullName": "transform", "description": "Transform message or Camel routes", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.TransformCommand", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "dataweave", "fullName": "transform dataweave", "description": "Convert DataWeave scripts to DataSonnet format", "sourceClass": "org.apache.camel.dsl. [...] { "name": "update", "fullName": "update", "description": "Update Camel project", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.update.UpdateCommand", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "list", "fullName": "update list", "description": "List available update versions for Camel and its runtime variants", "sourceClass": "org.apache.camel.dsl.jbang.cor [...] { "name": "version", "fullName": "version", "description": "Manage Camel versions", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.version.VersionCommand", "options": [ { "names": "-h,--help", "description": "Display the help and sub-commands", "javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "get", "fullName": "version get", "description": "Displays current Camel version", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.version.VersionGet", [...] - { "name": "wrapper", "fullName": "wrapper", "description": "Install Camel wrapper scripts for version pinning", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.WrapperCommand", "options": [ { "names": "--camel-version", "description": "Camel version to pin (defaults to current version)", "javaType": "java.lang.String", "type": "string" }, { "names": "--dir,--directory", "description": "Directory where wrapper files will be created", "defaultValue": ".", "javaType": "java.lan [...] + { "name": "wrapper", "fullName": "wrapper", "description": "Install Camel wrapper scripts for version pinning", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.WrapperCommand", "options": [ { "names": "--camel-version", "description": "Camel version to pin (defaults to current version)", "javaType": "java.lang.String", "type": "string" }, { "names": "--command-name", "description": "The name of the command to use (camel or camelw)", "defaultValue": "camel", "javaType": "java [...] ] } diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/WrapperCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/WrapperCommand.java index b3de36e37c24..32fa077e558a 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/WrapperCommand.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/WrapperCommand.java @@ -35,7 +35,7 @@ import picocli.CommandLine.Command; footer = { "%nExamples:", " camel wrapper", - " camel wrapper --camel-version=4.10.0" }) + " camel wrapper --camel-version=4.18.2" }) public class WrapperCommand extends CamelCommand { private static final String DEFAULT_REPO_URL = "https://repo1.maven.org/maven2"; @@ -56,6 +56,10 @@ public class WrapperCommand extends CamelCommand { defaultValue = ".") String directory = "."; + @CommandLine.Option(names = { "--command-name" }, + description = "The name of the command to use (camel or camelw)", defaultValue = "camel") + String commandName = "camel"; + public WrapperCommand(CamelJBangMain main) { super(main); } @@ -77,18 +81,18 @@ public class WrapperCommand extends CamelCommand { writeProperties(camelDir); // Write camelw script - writeScript(baseDir, "camelw"); + writeScript(baseDir, "camelw", commandName); // Write camelw.cmd script - writeScript(baseDir, "camelw.cmd"); + writeScript(baseDir, "camelw.cmd", commandName + ".cmd"); printer().println("Apache Camel wrapper installed successfully."); printer().println(" Camel version: " + camelVersion); printer().println(" Properties: " + camelDir.resolve(WRAPPER_PROPERTIES_FILE)); - printer().println(" Unix script: " + baseDir.resolve("camelw")); - printer().println(" Windows script: " + baseDir.resolve("camelw.cmd")); + printer().println(" Unix script: " + baseDir.resolve(commandName)); + printer().println(" Windows script: " + baseDir.resolve(commandName + ".cmd")); printer().println(); - printer().println("You can now use ./camelw instead of camel to run with the pinned version."); + printer().println("You can now use ./" + commandName + " instead of camel to run with the pinned version."); return 0; } @@ -128,18 +132,18 @@ public class WrapperCommand extends CamelCommand { + ".jar"; } - void writeScript(Path baseDir, String scriptName) throws IOException { - String resourcePath = "camel-wrapper/" + scriptName; + void writeScript(Path baseDir, String source, String commandName) throws IOException { + String resourcePath = "camel-wrapper/" + source; try (InputStream is = WrapperCommand.class.getClassLoader().getResourceAsStream(resourcePath)) { if (is == null) { throw new IOException("Resource not found: " + resourcePath); } String content = IOHelper.loadText(is); - Path scriptPath = baseDir.resolve(scriptName); + Path scriptPath = baseDir.resolve(commandName); Files.writeString(scriptPath, content); // Make Unix script executable - if (!scriptName.endsWith(".cmd")) { + if (!commandName.endsWith(".cmd")) { makeExecutable(scriptPath); } } diff --git a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/WrapperCommandTest.java b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/WrapperCommandTest.java index db832341a168..6f8115b698f0 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/WrapperCommandTest.java +++ b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/WrapperCommandTest.java @@ -61,8 +61,8 @@ class WrapperCommandTest { assertEquals(0, exit); assertTrue(Files.exists(workingDir.resolve(".camel/camel-wrapper.properties"))); - assertTrue(Files.exists(workingDir.resolve("camelw"))); - assertTrue(Files.exists(workingDir.resolve("camelw.cmd"))); + assertTrue(Files.exists(workingDir.resolve("camel"))); + assertTrue(Files.exists(workingDir.resolve("camel.cmd"))); } @Test @@ -138,11 +138,11 @@ class WrapperCommandTest { assertEquals(0, exit); - String camelw = Files.readString(workingDir.resolve("camelw")); + String camelw = Files.readString(workingDir.resolve("camel")); assertTrue(camelw.startsWith("#!/bin/sh")); assertTrue(camelw.contains("camel-wrapper.properties")); - String camelwCmd = Files.readString(workingDir.resolve("camelw.cmd")); + String camelwCmd = Files.readString(workingDir.resolve("camel.cmd")); assertTrue(camelwCmd.contains("camel-wrapper.properties")); } @@ -176,6 +176,30 @@ class WrapperCommandTest { String output = printer.getOutput(); assertTrue(output.contains("Apache Camel wrapper installed successfully.")); assertTrue(output.contains("Camel version: 4.10.0")); - assertTrue(output.contains("camelw")); + assertTrue(output.contains("camel")); } + + @Test + void testWrapperCommandName() throws Exception { + CamelJBangMain main = new CamelJBangMain(); + StringPrinter printer = new StringPrinter(); + main.setOut(printer); + + WrapperCommand cmd = new WrapperCommand(main); + cmd.directory = workingDir.toString(); + cmd.camelVersion = "4.10.0"; + cmd.commandName = "cheese"; + + int exit = cmd.doCall(); + + assertEquals(0, exit); + + String camelw = Files.readString(workingDir.resolve("cheese")); + assertTrue(camelw.startsWith("#!/bin/sh")); + assertTrue(camelw.contains("camel-wrapper.properties")); + + String camelwCmd = Files.readString(workingDir.resolve("cheese.cmd")); + assertTrue(camelwCmd.contains("camel-wrapper.properties")); + } + }
