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 71d38af4a88f camel-jbang: upgrade aesh 3.19.1, and @file arguments
again (#29745)
71d38af4a88f is described below
commit 71d38af4a88f6b42a49983d070ca9a9a0a0f9bbb
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Nov 13 16:56:00 2026 +0100
camel-jbang: upgrade aesh 3.19.1, and @file arguments again (#29745)
Upgrades aesh from 3.19 to 3.19.1, which fixes the issues found in the
Camel CLI port (aeshell/aesh#763 to #772), and uses its argument files to
bring back @file.
- aesh now wraps help headers and footers at 80 columns (#763); the footer
paragraphs of ten commands that were hand-wrapped at more than 80 columns
are reflowed. The CliHelpGoldenTest golden file is regenerated (long
option names put their description on the next line (#766), a missing
option value names the option as typed (#765)).
- @file arguments are back (#772): CamelJBangMain.execute expands them
before anything reads the command line, and camel shell expands them too;
the CliRunner used by the TUI and the AI tools does not. A file that does
not exist is a usage error (exit 2). New CamelJBangMainArgumentFileTest,
a section "Arguments from a file" in the CLI tips page, and the upgrade
guide no longer lists @file as a change and tells plugin authors that
aesh wraps footer lines at 80 columns.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Signed-off-by: Claus Ibsen <[email protected]>
---
.../ROOT/pages/camel-4x-upgrade-guide-4_24.adoc | 7 +-
.../modules/ROOT/pages/camel-jbang-tips.adoc | 24 ++
.../dsl/jbang/core/commands/CamelJBangMain.java | 30 ++
.../core/commands/CamelShellCommandRegistry.java | 5 +
.../dsl/jbang/core/commands/ChaosExplore.java | 20 +-
.../commands/action/CamelChaosChangeAction.java | 5 +-
.../action/CamelChaosExperimentAction.java | 26 +-
.../action/CamelChaosExploreFinishAction.java | 4 +-
.../action/CamelChaosExploreStartAction.java | 9 +-
.../core/commands/action/CamelMemoryLeak.java | 6 +-
.../dsl/jbang/core/commands/process/ListAbout.java | 6 +-
.../dsl/jbang/core/commands/process/ListChaos.java | 10 +-
.../jbang/core/commands/process/ListTimeline.java | 3 +-
.../commands/CamelJBangMainArgumentFileTest.java | 115 +++++++
.../src/test/resources/golden/cli-help.txt | 379 +++++++++++++--------
.../launcher/selfupdate/SelfUpdateCommand.java | 19 +-
parent/pom.xml | 2 +-
17 files changed, 481 insertions(+), 189 deletions(-)
diff --git
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
index f74c0e2bff83..e6222cfdeed0 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc
@@ -1378,17 +1378,14 @@ The Camel CLI parses its command lines, prints its help
and completes its comman
https://github.com/aeshell/aesh[aesh] instead of picocli. The commands and
their options are the same. The help looks a
little different: the default value of an option is on a line of its own
(`Default: ...`).
-An argument `@file` is no longer replaced by the arguments in that file
(picocli did that, such as
-`camel run @args.txt`). Give the arguments on the command line instead, for
example `camel run $(cat args.txt)` in a
-shell script.
-
A plugin of the Camel CLI (an implementation of
`org.apache.camel.dsl.jbang.core.common.Plugin`) must be changed and
built for Camel 4.24:
* `Plugin.customize` takes a `CommandTree` instead of a picocli `CommandLine`.
A command is added with
`commandLine.addSubcommand("mycommand", new CommandTree(new
MyCommand(main)))`.
* The command classes use the aesh annotations: `@CommandDefinition` instead
of `@Command` (the `footer` of the help
- is an attribute of it), `@Option(name = "my-option")` instead of
`@Option(names = "--my-option")` (with
+ is an attribute of it; aesh wraps the lines of the footer at 80 columns,
except indented lines such as examples, so
+ keep a line of text within 80 columns), `@Option(name = "my-option")`
instead of `@Option(names = "--my-option")` (with
`hasValue = false` for a flag), `@OptionList` for an option with several
values, `@Argument` or `@Arguments` instead
of `@Parameters`, and the aesh `@Mixin`.
* A class with the completion candidates of an option extends
`org.apache.camel.dsl.jbang.core.common.CompletionCandidates`,
diff --git a/docs/user-manual/modules/ROOT/pages/camel-jbang-tips.adoc
b/docs/user-manual/modules/ROOT/pages/camel-jbang-tips.adoc
index 4bdaf1643dea..963c2a27423b 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-jbang-tips.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-jbang-tips.adoc
@@ -187,3 +187,27 @@ curl -X DELETE http://0.0.0.0:8080/q/upload/bar.java
curl -X DELETE http://0.0.0.0:8080/q/upload/*.java
curl -X DELETE http://0.0.0.0:8080/q/upload/*
----
+
+== Arguments from a file
+
+A long command line can be kept in a file, and given as `@file`: the CLI
replaces it with the arguments in that file.
+
+For example, `run.txt` with:
+
+[source,text]
+----
+# the routes and the options to run them with
+run orders.yaml payments.yaml
+--dev
+--property=app.name="My Shop"
+----
+
+[source,bash]
+----
+camel @run.txt
+camel run @routes.txt --dev
+----
+
+The arguments are separated by spaces or line breaks, quotes group words, a
line that starts with `#` is a comment,
+and a file can name other files with `@`. Use `@@` for an argument that starts
with `@` itself. A file that does not
+exist is a usage error (exit code `2`).
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
index 2351ad432e22..58b2c02e0998 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
@@ -25,6 +25,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
import org.aesh.command.Command;
import org.aesh.command.CommandDefinition;
import org.aesh.command.CommandResult;
+import org.aesh.command.impl.parser.ArgfileExpander;
import org.aesh.command.invocation.CommandInvocation;
import org.aesh.command.option.Option;
import org.aesh.command.parser.CommandLineParserException;
@@ -74,6 +75,7 @@ import org.apache.camel.dsl.jbang.core.common.CliExitCode;
import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
import org.apache.camel.dsl.jbang.core.common.CommandTree;
import org.apache.camel.dsl.jbang.core.common.EnvironmentHelper;
+import org.apache.camel.dsl.jbang.core.common.JsonOutput;
import org.apache.camel.dsl.jbang.core.common.Plugin;
import org.apache.camel.dsl.jbang.core.common.PluginHelper;
import org.apache.camel.dsl.jbang.core.common.PluginType;
@@ -124,6 +126,12 @@ public class CamelJBangMain implements
Command<CommandInvocation> {
// ignore
}
+ args = expandArgumentFiles(args);
+ if (args == null) {
+ quit(CliExitCode.USAGE);
+ return;
+ }
+
// the CLI creates only the command that the command line names, as
creating all of them (and loading their
// classes) costs more than most commands take to run
String only = onlyCommand(args);
@@ -169,6 +177,28 @@ public class CamelJBangMain implements
Command<CommandInvocation> {
quit(exitCode);
}
+ /**
+ * Replaces an argument {@code @file} with the arguments in that file, as
picocli did: one or more per line, quotes
+ * group words, a line that starts with {@code #} is a comment, and {@code
@@} is a literal {@code @}. This is done
+ * before anything reads the command line, so the command it names is
created, and a command that runs the CLI again
+ * (such as {@code camel run --background}) has the arguments themselves.
+ *
+ * @param args the command line
+ * @return the command line with the arguments of the files, or
{@code null} when a file cannot be read (the
+ * error is printed)
+ */
+ String[] expandArgumentFiles(String... args) {
+ try {
+ return ArgfileExpander.expand(args);
+ } catch (CommandLineParserException e) {
+ out.printErr(e.getMessage());
+ if (JsonOutput.isRequested(args)) {
+ JsonOutput.printError(out, CliExitCode.USAGE, e.getMessage());
+ }
+ return null;
+ }
+ }
+
/**
* The command that a command line runs, when the CLI needs to create only
that command (of the CLI, or of a
* plugin): not for {@code camel} and a command line that starts with an
option (such as {@code --help}), which list
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelShellCommandRegistry.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelShellCommandRegistry.java
index ffb598a95049..a35a563d57c6 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelShellCommandRegistry.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelShellCommandRegistry.java
@@ -26,6 +26,7 @@ import java.util.Map;
import org.aesh.command.CommandDefinition;
import org.aesh.command.impl.internal.ProcessedCommand;
import org.aesh.command.impl.internal.ProcessedOption;
+import org.apache.camel.dsl.jbang.core.common.CliExitCode;
import org.apache.camel.dsl.jbang.core.common.CommandTree;
import org.apache.camel.dsl.jbang.run.common.RuntimeUtil;
import org.jline.reader.Candidate;
@@ -186,6 +187,10 @@ public class CamelShellCommandRegistry implements
CommandGroup {
String[] line = new String[args.length + 1];
line[0] = name;
System.arraycopy(args, 0, line, 1, args.length);
+ line = main.expandArgumentFiles(line);
+ if (line == null) {
+ return CliExitCode.USAGE;
+ }
return main.run(fresh, line);
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ChaosExplore.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ChaosExplore.java
index ef4b43628b2d..d86f7a40507e 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ChaosExplore.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ChaosExplore.java
@@ -50,16 +50,18 @@ import org.apache.camel.util.json.Jsoner;
+ " time budget, and reports what held and
what broke",
generateHelp = true,
footer = {
- "This command starts a chaos exploration with the
budget (camel cmd chaos-explore-start), and hands",
- "it to the AI of camel ask with a playbook: read
the suggestions, run one experiment per call",
- "(camel cmd chaos-experiment), read the verdicts,
and go on while there is time. The AI asks",
- "nothing on the way: starting this command is the
consent to the exploration, and camel-chaos",
- "removes every rule at the deadline. The AI never
changes the routes. When it is done, the",
- "exploration is finished, and its report and the
journal of the experiments are printed. The exit",
- "code is 1 when an experiment failed.",
+ "This command starts a chaos exploration with the
budget (camel cmd",
+ "chaos-explore-start), and hands it to the AI of
camel ask with a playbook: read",
+ "the suggestions, run one experiment per call
(camel cmd chaos-experiment), read",
+ "the verdicts, and go on while there is time. The
AI asks nothing on the way:",
+ "starting this command is the consent to the
exploration, and camel-chaos removes",
+ "every rule at the deadline. The AI never changes
the routes. When it is done,",
+ "the exploration is finished, and its report and
the journal of the experiments",
+ "are printed. The exit code is 1 when an experiment
failed.",
"",
- "The integration needs camel-chaos switched on
(camel run --chaos), and remote endpoints are best",
- "stubbed (camel run --stub=remote), so the
experiments do not reach real systems.",
+ "The integration needs camel-chaos switched on
(camel run --chaos), and remote",
+ "endpoints are best stubbed (camel run
--stub=remote), so the experiments do not",
+ "reach real systems.",
"",
"Examples:",
" camel cmd chaos-explore",
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelChaosChangeAction.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelChaosChangeAction.java
index cf1170f18a2b..dd085ec4a7c6 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelChaosChangeAction.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelChaosChangeAction.java
@@ -27,8 +27,9 @@ import org.apache.camel.util.json.JsonObject;
description = "Change a chaos rule of a running integration
(camel-chaos, for development only)",
generateHelp = true,
footer = {
- "The new rule replaces the rule with that id, and
starts with new counts and a new end time;",
- "it is the next version of the id. The report keeps
the replaced version.",
+ "The new rule replaces the rule with that id, and
starts with new counts and a",
+ "new end time; it is the next version of the id.
The report keeps the replaced",
+ "version.",
"",
"Without a name or pid, it changes the rule of the
only integration that runs,",
"or of the only one with chaos switched on; when
that is not clear, it fails",
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelChaosExperimentAction.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelChaosExperimentAction.java
index 678a1449ef7d..11a5d73be137 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelChaosExperimentAction.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelChaosExperimentAction.java
@@ -43,20 +43,20 @@ import org.apache.camel.util.json.JsonObject;
+ " send its traffic, wait for the verdict,
and end it",
generateHelp = true,
footer = {
- "An experiment is part of an exploration (camel cmd
chaos-explore-start). It tests a",
- "hypothesis with rules, one of them with an
expectation (expect=) that decides it.",
- "The rules are added together, the messages of
--feed are sent (as camel cmd send",
- "sends them, with --body, --header, --repeat and
--interval), and then it waits until",
- "the expectations are decided, or --wait is up. The
experiment is ended then, its",
- "rules are removed, and what came of it is printed:
the verdict, the expectations,",
- "what the routes did, and the traffic. It stays in
the journal of the exploration",
- "(camel get chaos --report).",
+ "An experiment is part of an exploration (camel cmd
chaos-explore-start). It",
+ "tests a hypothesis with rules, one of them with an
expectation (expect=) that",
+ "decides it. The rules are added together, the
messages of --feed are sent (as",
+ "camel cmd send sends them, with --body, --header,
--repeat and --interval), and",
+ "then it waits until the expectations are decided,
or --wait is up. The",
+ "experiment is ended then, its rules are removed,
and what came of it is",
+ "printed: the verdict, the expectations, what the
routes did, and the traffic. It",
+ "stays in the journal of the exploration (camel get
chaos --report).",
"",
- "The verdict is FAIL when an expectation is unmet
(exit code 1), PASS when all are",
- "met, and INCONCLUSIVE when it cannot tell: it
ended before an expectation was decided",
- "(wait longer than the within= of the expectation),
its faults never fired, or the",
- "route of a met expectation had no messages. --feed
can be the id of a route, as the",
- "feed: line of camel cmd chaos-suggest has it.",
+ "The verdict is FAIL when an expectation is unmet
(exit code 1), PASS when all",
+ "are met, and INCONCLUSIVE when it cannot tell: it
ended before an expectation",
+ "was decided (wait longer than the within= of the
expectation), its faults never",
+ "fired, or the route of a met expectation had no
messages. --feed can be the id",
+ "of a route, as the feed: line of camel cmd
chaos-suggest has it.",
"",
"Examples:",
" camel cmd chaos-experiment --hypothesis='a
failed refund is read again' \\",
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelChaosExploreFinishAction.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelChaosExploreFinishAction.java
index 64a05fb87269..7b88f319893e 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelChaosExploreFinishAction.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelChaosExploreFinishAction.java
@@ -29,8 +29,8 @@ import org.apache.camel.util.json.JsonObject;
description = "Finish the chaos exploration of a running
integration before its deadline",
generateHelp = true,
footer = {
- "The rules are removed (an open experiment is ended
with what came of it so far), and",
- "the journal stays in the report (camel get chaos
--report) until the next",
+ "The rules are removed (an open experiment is ended
with what came of it so far),",
+ "and the journal stays in the report (camel get
chaos --report) until the next",
"exploration starts or the report is reset.",
"",
"Examples:",
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelChaosExploreStartAction.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelChaosExploreStartAction.java
index 64d6499ab8f5..8f44d91bc109 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelChaosExploreStartAction.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelChaosExploreStartAction.java
@@ -29,10 +29,11 @@ import org.apache.camel.util.json.JsonObject;
+ " that camel-chaos enforces",
generateHelp = true,
footer = {
- "While the exploration runs, camel-chaos keeps its
journal: the baseline (the counts",
- "per route before its first rule), the rules tried,
and the experiments",
- "(camel cmd chaos-experiment). A rule ends at the
deadline at the latest, and at the",
- "deadline the rules are removed and the exploration
is finished, whatever happens.",
+ "While the exploration runs, camel-chaos keeps its
journal: the baseline (the",
+ "counts per route before its first rule), the rules
tried, and the experiments",
+ "(camel cmd chaos-experiment). A rule ends at the
deadline at the latest, and at",
+ "the deadline the rules are removed and the
exploration is finished, whatever",
+ "happens.",
"One exploration runs at a time. camel get chaos
--report shows it.",
"",
"Examples:",
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelMemoryLeak.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelMemoryLeak.java
index ac20b29e9263..072a7708eb71 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelMemoryLeak.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/action/CamelMemoryLeak.java
@@ -42,8 +42,10 @@ import org.apache.camel.util.json.JsonObject;
generateHelp = true,
footer = {
"Note: Sizes are sampled during the recording
window, not total heap usage.",
- "A longer recording captures more samples and shows
larger totals for the same leak.",
- "Use values to compare classes relative to each
other, not as absolute heap numbers.",
+ "A longer recording captures more samples and shows
larger totals for the same",
+ "leak.",
+ "Use values to compare classes relative to each
other, not as absolute heap",
+ "numbers.",
"",
"Examples:",
" camel cmd memory-leak --start",
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListAbout.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListAbout.java
index 9f1a3b16df33..53b4fa124209 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListAbout.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListAbout.java
@@ -38,8 +38,10 @@ import org.apache.camel.util.json.JsonObject;
description = "Get what an integration does and what has
happened: its purpose, what comes in, its routes, what goes out, and the last
minutes",
generateHelp = true,
footer = {
- "The purpose is the comment at the top of the main
source file, else the descriptions of the routes.",
- "The last minutes come from the timeline the
integration records (the timeline dev console, on in profile dev).",
+ "The purpose is the comment at the top of the main
source file, else the",
+ "descriptions of the routes.",
+ "The last minutes come from the timeline the
integration records (the timeline",
+ "dev console, on in profile dev).",
"",
"Examples:",
" camel get about",
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListChaos.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListChaos.java
index 01ffd143f22c..eb6af999bee6 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListChaos.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListChaos.java
@@ -41,10 +41,12 @@ import org.apache.camel.util.json.Jsoner;
@CommandDefinition(name = "chaos", description = "Get the chaos rules of
running integrations, or their report (camel-chaos)",
generateHelp = true,
footer = {
- "Lists the current rules of the integrations that
have camel-chaos switched on: id, version, state,",
- "matches, the faults that fired, the observed rate,
when a rule last fired, the effect of its faults",
- "on the exchanges, and the rule with what it does
in plain words. With --report it shows the report instead: the verdict, the
seed, all rules (also",
- "the removed and replaced versions), the counts per
route, the recent faults and the reasons of a FAIL.",
+ "Lists the current rules of the integrations that
have camel-chaos switched on:",
+ "id, version, state, matches, the faults that
fired, the observed rate, when a",
+ "rule last fired, the effect of its faults on the
exchanges, and the rule with",
+ "what it does in plain words. With --report it
shows the report instead: the",
+ "verdict, the seed, all rules (also the removed and
replaced versions), the",
+ "counts per route, the recent faults and the
reasons of a FAIL.",
"",
"Examples:",
" camel get chaos",
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListTimeline.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListTimeline.java
index e54a6bf53da8..44d2484394c3 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListTimeline.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListTimeline.java
@@ -48,7 +48,8 @@ import org.apache.camel.util.json.Jsoner;
description = "Get what the routes did per second, the
errors, and the failed and slowest exchanges",
generateHelp = true,
footer = {
- "The integration records the last 5 minutes (the
timeline dev console, on in profile dev).",
+ "The integration records the last 5 minutes (the
timeline dev console, on in",
+ "profile dev).",
"",
"Examples:",
" camel get timeline",
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMainArgumentFileTest.java
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMainArgumentFileTest.java
new file mode 100644
index 000000000000..f6002f4fbbff
--- /dev/null
+++
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMainArgumentFileTest.java
@@ -0,0 +1,115 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.dsl.jbang.core.commands;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.camel.dsl.jbang.core.common.CliExitCode;
+import org.apache.camel.dsl.jbang.core.common.CommandTree;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class CamelJBangMainArgumentFileTest extends CamelCommandBaseTestSupport {
+
+ @TempDir
+ Path dir;
+
+ @BeforeEach
+ public void setup() throws Exception {
+ super.setup();
+
+ useTestHomeDir();
+ }
+
+ @Test
+ public void anArgumentFileIsReplacedByItsArguments() throws Exception {
+ Path file = dir.resolve("args.txt");
+ Files.writeString(file, """
+ # the command and its options
+ config "list"
+ """);
+
+ TestMain main = execute("@" + file);
+
+ assertThat(main.exitCode).isEqualTo(CliExitCode.OK);
+ // the command line is read before the commands are created, so only
the command of the file is created
+
assertThat(main.executed.getSubcommands().keySet()).isEqualTo(Set.of("config"));
+ assertThat(main.executed.getArgs()).isEqualTo(List.of("config",
"list"));
+ }
+
+ @Test
+ public void anArgumentFileThatDoesNotExistIsAUsageError() {
+ Path file = dir.resolve("nope.txt");
+
+ TestMain main = execute("@" + file);
+
+ assertThat(main.exitCode).isEqualTo(CliExitCode.USAGE);
+ assertThat(main.executed).isNull();
+ assertThat(printer.getStderr()).contains("ERROR: Argument file not
found: '" + file + "'");
+ }
+
+ @Test
+ public void theArgumentFileOfTheDocs() throws Exception {
+ Path file = dir.resolve("run.txt");
+ Files.writeString(file, """
+ # the routes and the options to run them with
+ run orders.yaml payments.yaml
+ --dev
+ --property=app.name="My Shop"
+ """);
+ CamelJBangMain main = new CamelJBangMain().withPrinter(printer);
+
+ assertThat(main.expandArgumentFiles("@" + file))
+ .containsExactly("run", "orders.yaml", "payments.yaml",
"--dev", "--property=app.name=My Shop");
+ }
+
+ @Test
+ public void aDoubleAtIsALiteralAt() {
+ CamelJBangMain main = new CamelJBangMain().withPrinter(printer);
+
+ assertThat(main.expandArgumentFiles("cmd", "send",
"@@foo")).containsExactly("cmd", "send", "@foo");
+ }
+
+ private TestMain execute(String... args) {
+ TestMain main = new TestMain();
+ main.withPrinter(printer);
+ main.setDiscoverPlugins(false);
+ main.execute(args);
+ return main;
+ }
+
+ private static class TestMain extends CamelJBangMain {
+ CommandTree executed;
+ int exitCode = -1;
+
+ @Override
+ public void postExecute(CommandTree commandLine, String[] args, int
exitCode) {
+ executed = commandLine;
+ }
+
+ @Override
+ public void quit(int exitCode) {
+ this.exitCode = exitCode;
+ }
+ }
+}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/test/resources/golden/cli-help.txt
b/dsl/camel-jbang/camel-jbang-core/src/test/resources/golden/cli-help.txt
index 3e02b608b2eb..bff8a628efdf 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/test/resources/golden/cli-help.txt
+++ b/dsl/camel-jbang/camel-jbang-core/src/test/resources/golden/cli-help.txt
@@ -97,7 +97,8 @@ Options:
--url=<url> LLM API endpoint URL. Auto-detected if not
specified. Also reads AZURE_OPENAI_ENDPOINT or
WATSONX_URL env vars
- --api-type=<api-type> API type: 'ollama', 'openai', 'anthropic', or
+ --api-type=<api-type>
+ API type: 'ollama', 'openai', 'anthropic', or
'watsonx'. Valid values: ollama, openai, anthropic,
gemini, watsonx
--api-key=<api-key> API key. Also reads ANTHROPIC_API_KEY,
@@ -155,7 +156,8 @@ Options:
endpoints are expected in the format
"[[apigroup/]version:]kind:[namespace/]name", plain
Camel URIs or Kamelet name.
- --property=<property> Adds a pipe property in the form of
+ --property=<property>
+ Adds a pipe property in the form of
[source|sink|error-handler|step-<n>].<key>=<value>
where <n> is the step number starting from 1
--output=<output> Output format generated by this command (supports:
@@ -657,7 +659,8 @@ Usage: camel cmd browse [-h] [--endpoint=<endpoint>]
[--short-uri] [--wide-uri]
Options:
-h, --help Display this help and exit
- --endpoint=<endpoint> Endpoint to browse messages from (can be uri,
+ --endpoint=<endpoint>
+ Endpoint to browse messages from (can be uri,
pattern, or refer to a route id)
--short-uri List endpoint URI without query parameters (short)
--wide-uri List endpoint URI in full details
@@ -755,8 +758,9 @@ Options:
match one); without it, the only one running, or the
only one with chaos switched on
-The new rule replaces the rule with that id, and starts with new counts and a
new end time;
-it is the next version of the id. The report keeps the replaced version.
+The new rule replaces the rule with that id, and starts with new counts and a
+new end time; it is the next version of the id. The report keeps the replaced
+version.
Without a name or pid, it changes the rule of the only integration that runs,
or of the only one with chaos switched on; when that is not clear, it fails
@@ -816,7 +820,8 @@ Options:
--header=<header> A header of the messages as key=value; can be given
more than once
--repeat=<repeat> How many messages to send in all (at most 10000)
- --interval=<interval> The pause between two messages, such as 200ms, or a
+ --interval=<interval>
+ The pause between two messages, such as 200ms, or a
range such as 100..500 to draw each pause at random
(at most 60s)
--wait=<wait> The longest wait for the verdict after the messages
@@ -833,20 +838,20 @@ Options:
match one); without it, the only one running, or
the
only one with chaos switched on
-An experiment is part of an exploration (camel cmd chaos-explore-start). It
tests a
-hypothesis with rules, one of them with an expectation (expect=) that decides
it.
-The rules are added together, the messages of --feed are sent (as camel cmd
send
-sends them, with --body, --header, --repeat and --interval), and then it waits
until
-the expectations are decided, or --wait is up. The experiment is ended then,
its
-rules are removed, and what came of it is printed: the verdict, the
expectations,
-what the routes did, and the traffic. It stays in the journal of the
exploration
-(camel get chaos --report).
+An experiment is part of an exploration (camel cmd chaos-explore-start). It
+tests a hypothesis with rules, one of them with an expectation (expect=) that
+decides it. The rules are added together, the messages of --feed are sent (as
+camel cmd send sends them, with --body, --header, --repeat and --interval), and
+then it waits until the expectations are decided, or --wait is up. The
+experiment is ended then, its rules are removed, and what came of it is
+printed: the verdict, the expectations, what the routes did, and the traffic.
It
+stays in the journal of the exploration (camel get chaos --report).
-The verdict is FAIL when an expectation is unmet (exit code 1), PASS when all
are
-met, and INCONCLUSIVE when it cannot tell: it ended before an expectation was
decided
-(wait longer than the within= of the expectation), its faults never fired, or
the
-route of a met expectation had no messages. --feed can be the id of a route,
as the
-feed: line of camel cmd chaos-suggest has it.
+The verdict is FAIL when an expectation is unmet (exit code 1), PASS when all
+are met, and INCONCLUSIVE when it cannot tell: it ended before an expectation
+was decided (wait longer than the within= of the expectation), its faults never
+fired, or the route of a met expectation had no messages. --feed can be the id
+of a route, as the feed: line of camel cmd chaos-suggest has it.
Examples:
camel cmd chaos-experiment --hypothesis='a failed refund is read again' \
@@ -876,7 +881,8 @@ Options:
routes)
--url=<url> LLM API endpoint URL, as for camel ask.
Auto-detected if not specified
- --api-type=<api-type> API type: 'ollama', 'openai', 'anthropic', or
+ --api-type=<api-type>
+ API type: 'ollama', 'openai', 'anthropic', or
'watsonx'. Valid values: ollama, openai, anthropic,
gemini, watsonx
--api-key=<api-key> API key. Also reads ANTHROPIC_API_KEY,
@@ -907,16 +913,18 @@ Options:
match one); without it, the only one running, or
the
only one with chaos switched on
-This command starts a chaos exploration with the budget (camel cmd
chaos-explore-start), and hands
-it to the AI of camel ask with a playbook: read the suggestions, run one
experiment per call
-(camel cmd chaos-experiment), read the verdicts, and go on while there is
time. The AI asks
-nothing on the way: starting this command is the consent to the exploration,
and camel-chaos
-removes every rule at the deadline. The AI never changes the routes. When it
is done, the
-exploration is finished, and its report and the journal of the experiments are
printed. The exit
-code is 1 when an experiment failed.
+This command starts a chaos exploration with the budget (camel cmd
+chaos-explore-start), and hands it to the AI of camel ask with a playbook: read
+the suggestions, run one experiment per call (camel cmd chaos-experiment), read
+the verdicts, and go on while there is time. The AI asks nothing on the way:
+starting this command is the consent to the exploration, and camel-chaos
removes
+every rule at the deadline. The AI never changes the routes. When it is done,
+the exploration is finished, and its report and the journal of the experiments
+are printed. The exit code is 1 when an experiment failed.
-The integration needs camel-chaos switched on (camel run --chaos), and remote
endpoints are best
-stubbed (camel run --stub=remote), so the experiments do not reach real
systems.
+The integration needs camel-chaos switched on (camel run --chaos), and remote
+endpoints are best stubbed (camel run --stub=remote), so the experiments do not
+reach real systems.
Examples:
camel cmd chaos-explore
@@ -936,8 +944,8 @@ Options:
match one); without it, the only one running, or the
only one with chaos switched on
-The rules are removed (an open experiment is ended with what came of it so
far), and
-the journal stays in the report (camel get chaos --report) until the next
+The rules are removed (an open experiment is ended with what came of it so
far),
+and the journal stays in the report (camel get chaos --report) until the next
exploration starts or the report is reset.
Examples:
@@ -962,10 +970,11 @@ Options:
match one); without it, the only one running, or the
only one with chaos switched on
-While the exploration runs, camel-chaos keeps its journal: the baseline (the
counts
-per route before its first rule), the rules tried, and the experiments
-(camel cmd chaos-experiment). A rule ends at the deadline at the latest, and
at the
-deadline the rules are removed and the exploration is finished, whatever
happens.
+While the exploration runs, camel-chaos keeps its journal: the baseline (the
+counts per route before its first rule), the rules tried, and the experiments
+(camel cmd chaos-experiment). A rule ends at the deadline at the latest, and at
+the deadline the rules are removed and the exploration is finished, whatever
+happens.
One exploration runs at a time. camel get chaos --report shows it.
Examples:
@@ -1158,7 +1167,8 @@ Options:
millis or as a duration such as 30s
Default: 10000
--watch Execute periodically and showing output fullscreen
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -1228,12 +1238,14 @@ Options:
--mode=<mode> Recording mode: dual (default, two recordings with
trend comparison) or single (one recording)
Default: dual
- --duration=<duration> Recording duration in seconds (auto-stops after
this
+ --duration=<duration>
+ Recording duration in seconds (auto-stops after
this
time)
Default: 60
--top=<top> Show only the top N samples
Default: 50
- --min-size=<min-size> Only show samples with total size above this value
+ --min-size=<min-size>
+ Only show samples with total size above this value
(e.g. 1024, 10KB, 1MB). Default 1KB in dual mode to
filter noise
Default: 0
@@ -1241,8 +1253,10 @@ Options:
<name> Name or pid of running Camel integration
Note: Sizes are sampled during the recording window, not total heap usage.
-A longer recording captures more samples and shows larger totals for the same
leak.
-Use values to compare classes relative to each other, not as absolute heap
numbers.
+A longer recording captures more samples and shows larger totals for the same
+leak.
+Use values to compare classes relative to each other, not as absolute heap
+numbers.
Examples:
camel cmd memory-leak --start
@@ -1291,7 +1305,8 @@ Options:
enter to exit). Without an interactive terminal the
default is false, unless --duration is given.
Default: true
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
--prefix=<prefix> Print prefix with running Camel integration name.
@@ -1472,7 +1487,8 @@ Options:
millis or as a duration such as 30s
Default: 10000
--watch Execute periodically and showing output fullscreen
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<<files>> Source file name(s) (shell-expanded wildcards), or
@@ -1649,7 +1665,8 @@ Options:
--repeat=<repeat> Send the message this many times (going round the
files of a folder body), and print a summary
instead
of each reply (at most 10000)
- --interval=<interval> The pause between two messages with --repeat or a
+ --interval=<interval>
+ The pause between two messages with --repeat or a
folder body, in millis or as a duration such as
200ms or 1s, or a range such as 100..500 or
100ms..2s to draw each pause at random (at most
60s)
@@ -1747,7 +1764,8 @@ Options:
--datasource=<datasource>
Name of the DataSource bean (auto-detected if only
one exists)
- --max-rows=<max-rows> Maximum number of rows to return
+ --max-rows=<max-rows>
+ Maximum number of rows to return
Default: 100
--query-timeout=<query-timeout>
Query timeout in seconds
@@ -1872,7 +1890,8 @@ Options:
millis or as a duration such as 30s
Default: 10000
--watch Execute periodically and showing output fullscreen
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -1922,7 +1941,8 @@ Options:
millis or as a duration such as 30s
Default: 10000
--watch Execute periodically and showing output fullscreen
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -2109,7 +2129,8 @@ Options:
Source directory for dynamically loading Camel
file(s) to run. When using this, then files cannot
be specified at the same time.
- --data-dir=<data-dir> Folders under the source directory (comma
separated)
+ --data-dir=<data-dir>
+ Folders under the source directory (comma
separated)
that hold data the routes read or write, not
sources: in dev mode a change in them does not
reload the routes (such as inbox,archive).
@@ -2274,7 +2295,8 @@ Options:
are routed to stderr so stdout carries MCP protocol
only.
Default: false
- --mcp-tags=<mcp-tags> Comma-separated ai-tool tags to expose on the
+ --mcp-tags=<mcp-tags>
+ Comma-separated ai-tool tags to expose on the
ai-tool MCP server (maps to camel.server.mcp-tags).
Use with --mcp-stdio or when
camel.server.mcp-enabled is configured for HTTP
@@ -2299,7 +2321,8 @@ Options:
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
- --jvm-args=<jvm-args> Additional JVM arguments (e.g. -Xmx256m -Xms128m)
+ --jvm-args=<jvm-args>
+ Additional JVM arguments (e.g. -Xmx256m -Xms128m)
--name=<name> The name of the Camel application. By default the
name of the directory when running a whole
directory
(--source-dir, or a directory), else the name of
the
@@ -2325,7 +2348,8 @@ Options:
when the chaos verdict is FAIL. With Quarkus it
needs Camel Quarkus on Camel 4.24 or newer
Default: false
- --chaos-report=<file> Write the chaos report as JSON to this file when
the
+ --chaos-report=<file>
+ Write the chaos report as JSON to this file when
the
run ends (with --chaos)
--local-kamelet-dir=<local-kamelet-dir>
Local directory (or github link) for loading
@@ -2334,7 +2358,8 @@ Options:
--modeline Whether to support JBang style //DEPS to specify
additional dependencies
Default: true
- --open-api=<open-api> Adds an OpenAPI spec from the given file (json or
+ --open-api=<open-api>
+ Adds an OpenAPI spec from the given file (json or
yaml file)
--code=<code> Run the given text or file as Java DSL routes
--verbose Verbose output of startup activity (dependency
@@ -2503,7 +2528,8 @@ Options:
Default: false
--docker Include Docker files in exported project
Default: true
- --open-api=<open-api> Adds an OpenAPI spec from the given file (json or
+ --open-api=<open-api>
+ Adds an OpenAPI spec from the given file (json or
yaml file)
--observe Enable observability services
Default: false
@@ -2573,7 +2599,8 @@ Options:
Default: true
--skip-plugins Skip plugins during export
Default: false
- --groovy-pre-compiled Whether to include pre-compiled Groovy classes in
+ --groovy-pre-compiled
+ Whether to include pre-compiled Groovy classes in
the export (only supported with runtime=camel-main)
Default: false
--hawtio Whether to include Hawtio web console (only
@@ -2706,7 +2733,8 @@ Options:
Default: false
--docker Include Docker files in exported project
Default: true
- --open-api=<open-api> Adds an OpenAPI spec from the given file (json or
+ --open-api=<open-api>
+ Adds an OpenAPI spec from the given file (json or
yaml file)
--observe Enable observability services
Default: false
@@ -2776,7 +2804,8 @@ Options:
Default: true
--skip-plugins Skip plugins during export
Default: false
- --groovy-pre-compiled Whether to include pre-compiled Groovy classes in
+ --groovy-pre-compiled
+ Whether to include pre-compiled Groovy classes in
the export (only supported with runtime=camel-main)
Default: false
--hawtio Whether to include Hawtio web console (only
@@ -2938,7 +2967,8 @@ Options:
Default: false
--docker Include Docker files in exported project
Default: true
- --open-api=<open-api> Adds an OpenAPI spec from the given file (json or
+ --open-api=<open-api>
+ Adds an OpenAPI spec from the given file (json or
yaml file)
--observe Enable observability services
Default: false
@@ -3008,7 +3038,8 @@ Options:
Default: true
--skip-plugins Skip plugins during export
Default: false
- --groovy-pre-compiled Whether to include pre-compiled Groovy classes in
+ --groovy-pre-compiled
+ Whether to include pre-compiled Groovy classes in
the export (only supported with runtime=camel-main)
Default: false
--hawtio Whether to include Hawtio web console (only
@@ -3075,7 +3106,8 @@ Options:
Source directory for dynamically loading Camel
file(s) to run. When using this, then files cannot
be specified at the same time.
- --data-dir=<data-dir> Folders under the source directory (comma
separated)
+ --data-dir=<data-dir>
+ Folders under the source directory (comma
separated)
that hold data the routes read or write, not
sources: in dev mode a change in them does not
reload the routes (such as inbox,archive).
@@ -3240,7 +3272,8 @@ Options:
are routed to stderr so stdout carries MCP protocol
only.
Default: false
- --mcp-tags=<mcp-tags> Comma-separated ai-tool tags to expose on the
+ --mcp-tags=<mcp-tags>
+ Comma-separated ai-tool tags to expose on the
ai-tool MCP server (maps to camel.server.mcp-tags).
Use with --mcp-stdio or when
camel.server.mcp-enabled is configured for HTTP
@@ -3265,7 +3298,8 @@ Options:
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
- --jvm-args=<jvm-args> Additional JVM arguments (e.g. -Xmx256m -Xms128m)
+ --jvm-args=<jvm-args>
+ Additional JVM arguments (e.g. -Xmx256m -Xms128m)
--name=<name> The name of the Camel application. By default the
name of the directory when running a whole
directory
(--source-dir, or a directory), else the name of
the
@@ -3291,7 +3325,8 @@ Options:
when the chaos verdict is FAIL. With Quarkus it
needs Camel Quarkus on Camel 4.24 or newer
Default: false
- --chaos-report=<file> Write the chaos report as JSON to this file when
the
+ --chaos-report=<file>
+ Write the chaos report as JSON to this file when
the
run ends (with --chaos)
--local-kamelet-dir=<local-kamelet-dir>
Local directory (or github link) for loading
@@ -3300,7 +3335,8 @@ Options:
--modeline Whether to support JBang style //DEPS to specify
additional dependencies
Default: true
- --open-api=<open-api> Adds an OpenAPI spec from the given file (json or
+ --open-api=<open-api>
+ Adds an OpenAPI spec from the given file (json or
yaml file)
--code=<code> Run the given text or file as Java DSL routes
--verbose Verbose output of startup activity (dependency
@@ -3462,16 +3498,19 @@ Options:
--camel-version=<camel-version>
To run using a different Camel version than the
default version.
- --language=<language> Language to use
+ --language=<language>
+ Language to use
Default: simple
--predicate Whether to force evaluating as predicate
Default: false
- --template=<template> The template to use for evaluating (prefix with
+ --template=<template>
+ The template to use for evaluating (prefix with
file: to refer to loading template from file)
--body=<body> Message body (prefix with file: to refer to loading
message body from file)
--header=<header> Message header (key=value)
- --variable=<variable> Exchange variable (key=value)
+ --variable=<variable>
+ Exchange variable (key=value)
--timeout=<timeout> Timeout waiting for evaluation to be done, in
millis
or as a duration such as 30s
Default: 10000
@@ -3484,7 +3523,8 @@ Options:
--fresh Make sure we use fresh (i.e. non-cached) resources
Default: false
--watch Execute periodically and showing output fullscreen
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -3507,7 +3547,8 @@ Options:
--url=<url> LLM API endpoint URL. Auto-detected from 'camel
infra' for Ollama if not specified. Also reads
AZURE_OPENAI_ENDPOINT or WATSONX_URL env vars
- --api-type=<api-type> API type: 'ollama', 'openai' (OpenAI-compatible),
+ --api-type=<api-type>
+ API type: 'ollama', 'openai' (OpenAI-compatible),
'anthropic' (Anthropic/Vertex AI), or 'watsonx'
(IBM
watsonx.ai). Valid values: ollama, openai,
anthropic, gemini, watsonx
@@ -3650,7 +3691,8 @@ Options:
Default: false
--docker Include Docker files in exported project
Default: true
- --open-api=<open-api> Adds an OpenAPI spec from the given file (json or
+ --open-api=<open-api>
+ Adds an OpenAPI spec from the given file (json or
yaml file)
--observe Enable observability services
Default: false
@@ -3720,7 +3762,8 @@ Options:
Default: true
--skip-plugins Skip plugins during export
Default: false
- --groovy-pre-compiled Whether to include pre-compiled Groovy classes in
+ --groovy-pre-compiled
+ Whether to include pre-compiled Groovy classes in
the export (only supported with runtime=camel-main)
Default: false
--hawtio Whether to include Hawtio web console (only
@@ -3803,13 +3846,16 @@ Options:
-h, --help Display this help and exit
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
-The purpose is the comment at the top of the main source file, else the
descriptions of the routes.
-The last minutes come from the timeline the integration records (the timeline
dev console, on in profile dev).
+The purpose is the comment at the top of the main source file, else the
+descriptions of the routes.
+The last minutes come from the timeline the integration records (the timeline
+dev console, on in profile dev).
Examples:
camel get about
@@ -3861,7 +3907,8 @@ Options:
Default: pid
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -3883,15 +3930,18 @@ Options:
Default: pid
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
-Lists the current rules of the integrations that have camel-chaos switched on:
id, version, state,
-matches, the faults that fired, the observed rate, when a rule last fired, the
effect of its faults
-on the exchanges, and the rule with what it does in plain words. With --report
it shows the report instead: the verdict, the seed, all rules (also
-the removed and replaced versions), the counts per route, the recent faults
and the reasons of a FAIL.
+Lists the current rules of the integrations that have camel-chaos switched on:
+id, version, state, matches, the faults that fired, the observed rate, when a
+rule last fired, the effect of its faults on the exchanges, and the rule with
+what it does in plain words. With --report it shows the report instead: the
+verdict, the seed, all rules (also the removed and replaced versions), the
+counts per route, the recent faults and the reasons of a FAIL.
Examples:
camel get chaos
@@ -3909,7 +3959,8 @@ Options:
Default: pid
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -3938,7 +3989,8 @@ Options:
--wide-uri List endpoint URI in full details
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -3960,7 +4012,8 @@ Options:
--remote Break down counters into remote/total pairs
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -3983,7 +4036,8 @@ Options:
--fail Get the failed exchanges from a running integration
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4003,7 +4057,8 @@ Options:
Default: pid
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4039,7 +4094,8 @@ Options:
--wide-uri List endpoint URI in full details
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4083,7 +4139,8 @@ Options:
Default: unicode
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4101,7 +4158,8 @@ Options:
exchange
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4121,7 +4179,8 @@ Options:
Default: pid
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4150,7 +4209,8 @@ Options:
--filter=<filter> Filter groups by name
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4180,7 +4240,8 @@ Options:
Default: 1
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4245,7 +4306,8 @@ Options:
millis or as a duration such as 30s
Default: 10000
--watch Execute periodically and showing output fullscreen
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4261,7 +4323,8 @@ Options:
Default: pid
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4281,7 +4344,8 @@ Options:
Default: pid
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4306,7 +4370,8 @@ Options:
--wide-uri List endpoint URI in full details
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4336,7 +4401,8 @@ Options:
Default: false
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4358,7 +4424,8 @@ Options:
--all Include management endpoints
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4395,7 +4462,8 @@ Options:
--show-group Include group column
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4422,7 +4490,8 @@ Options:
--wide-uri List endpoint URI in full details
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4450,7 +4519,8 @@ Options:
Default: true
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4471,7 +4541,8 @@ Options:
--verbose Show more details
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4517,7 +4588,8 @@ Options:
reload changed it
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4549,7 +4621,8 @@ Options:
millis or as a duration such as 30s
Default: 10000
--watch Execute periodically and showing output fullscreen
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4574,7 +4647,8 @@ Options:
--wide-uri List endpoint URI in full details
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4616,7 +4690,8 @@ Options:
Default: pid
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4639,7 +4714,8 @@ Options:
millis or as a duration such as 30s
Default: 10000
--watch Execute periodically and showing output fullscreen
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4676,12 +4752,14 @@ Options:
--wide-uri List endpoint URI in full details
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
-The integration records the last 5 minutes (the timeline dev console, on in
profile dev).
+The integration records the last 5 minutes (the timeline dev console, on in
+profile dev).
Examples:
camel get timeline
@@ -4716,7 +4794,8 @@ Options:
Default: pid
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4736,7 +4815,8 @@ Options:
Default: pid
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -4756,7 +4836,8 @@ Options:
-h, --help Display this help and exit
--url=<url> LLM API endpoint URL. Auto-detected from 'camel
infra' for Ollama if not specified.
- --api-type=<api-type> API type: 'ollama' or 'openai' (OpenAI-compatible).
+ --api-type=<api-type>
+ API type: 'ollama' or 'openai' (OpenAI-compatible).
Valid values: ollama, openai
Default: ollama
--api-key=<api-key> API key for authentication. Also reads
@@ -4800,7 +4881,8 @@ Options:
--port=<port> Port number to use for Hawtio web console (port
8888
by default)
Default: 8888
- --open-url, --openUrl To automatic open Hawtio web console in the web
+ --open-url, --openUrl
+ To automatic open Hawtio web console in the web
browser (without an interactive terminal the
default
is false)
Default: true
@@ -4865,7 +4947,8 @@ Options:
enter to exit). Without an interactive terminal the
default is false, unless --duration is given.
Default: true
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
--json Output in JSON Format
@@ -5018,7 +5101,8 @@ Options:
enter to exit). Without an interactive terminal the
default is false, unless --duration is given.
Default: true
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
--startup Only shows logs from the starting phase to make it
@@ -5090,7 +5174,8 @@ Options:
--url=<url> LLM API endpoint URL. Auto-detected from 'camel
infra' for Ollama if not specified. Also reads
AZURE_OPENAI_ENDPOINT or WATSONX_URL env vars
- --api-type=<api-type> API type: 'ollama', 'openai' (OpenAI-compatible),
+ --api-type=<api-type>
+ API type: 'ollama', 'openai' (OpenAI-compatible),
'anthropic' (Anthropic/Vertex AI), or 'watsonx'
(IBM
watsonx.ai). Valid values: ollama, openai,
anthropic, gemini, watsonx
@@ -5231,7 +5316,8 @@ Options:
--pid List only pid in the output
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
@@ -5308,7 +5394,8 @@ Options:
Source directory for dynamically loading Camel
file(s) to run. When using this, then files cannot
be specified at the same time.
- --data-dir=<data-dir> Folders under the source directory (comma
separated)
+ --data-dir=<data-dir>
+ Folders under the source directory (comma
separated)
that hold data the routes read or write, not
sources: in dev mode a change in them does not
reload the routes (such as inbox,archive).
@@ -5473,7 +5560,8 @@ Options:
are routed to stderr so stdout carries MCP protocol
only.
Default: false
- --mcp-tags=<mcp-tags> Comma-separated ai-tool tags to expose on the
+ --mcp-tags=<mcp-tags>
+ Comma-separated ai-tool tags to expose on the
ai-tool MCP server (maps to camel.server.mcp-tags).
Use with --mcp-stdio or when
camel.server.mcp-enabled is configured for HTTP
@@ -5498,7 +5586,8 @@ Options:
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
- --jvm-args=<jvm-args> Additional JVM arguments (e.g. -Xmx256m -Xms128m)
+ --jvm-args=<jvm-args>
+ Additional JVM arguments (e.g. -Xmx256m -Xms128m)
--name=<name> The name of the Camel application. By default the
name of the directory when running a whole
directory
(--source-dir, or a directory), else the name of
the
@@ -5524,7 +5613,8 @@ Options:
when the chaos verdict is FAIL. With Quarkus it
needs Camel Quarkus on Camel 4.24 or newer
Default: false
- --chaos-report=<file> Write the chaos report as JSON to this file when
the
+ --chaos-report=<file>
+ Write the chaos report as JSON to this file when
the
run ends (with --chaos)
--local-kamelet-dir=<local-kamelet-dir>
Local directory (or github link) for loading
@@ -5533,7 +5623,8 @@ Options:
--modeline Whether to support JBang style //DEPS to specify
additional dependencies
Default: true
- --open-api=<open-api> Adds an OpenAPI spec from the given file (json or
+ --open-api=<open-api>
+ Adds an OpenAPI spec from the given file (json or
yaml file)
--code=<code> Run the given text or file as Java DSL routes
--verbose Verbose output of startup activity (dependency
@@ -5704,7 +5795,8 @@ Options:
Default: false
--docker Include Docker files in exported project
Default: true
- --open-api=<open-api> Adds an OpenAPI spec from the given file (json or
+ --open-api=<open-api>
+ Adds an OpenAPI spec from the given file (json or
yaml file)
--observe Enable observability services
Default: false
@@ -5774,7 +5866,8 @@ Options:
Default: true
--skip-plugins Skip plugins during export
Default: false
- --groovy-pre-compiled Whether to include pre-compiled Groovy classes in
+ --groovy-pre-compiled
+ Whether to include pre-compiled Groovy classes in
the export (only supported with runtime=camel-main)
Default: false
--hawtio Whether to include Hawtio web console (only
@@ -5878,10 +5971,13 @@ Usage: camel semantic audit [-h]
[--event-id=<event-id>] [--category=<category>]
Options:
-h, --help Display this help and exit
- --event-id=<event-id> Retrieve one recorded event instead of a page
- --category=<category> Filter by record category: evaluation or request
+ --event-id=<event-id>
+ Retrieve one recorded event instead of a page
+ --category=<category>
+ Filter by record category: evaluation or request
--expert=<expert> Filter by expert bean reference
- --route-id=<route-id> Filter by entry route ID
+ --route-id=<route-id>
+ Filter by entry route ID
--breadcrumb-id=<breadcrumb-id>
Filter by Camel breadcrumb ID
--since=<since> Earliest timestamp, inclusive, in ISO-8601 format
@@ -5954,7 +6050,8 @@ Options:
json:value)
--header=<header> Sample header (key=value; use json: for a typed
value)
- --variable=<variable> Sample exchange-local variable (key=value; use
json:
+ --variable=<variable>
+ Sample exchange-local variable (key=value; use
json:
for a typed value)
--expert=<expert> Expert to call directly
--operation=<operation>
@@ -6074,7 +6171,8 @@ Options:
Default: mem
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -6103,7 +6201,8 @@ Options:
--filter=<filter> Filter groups by name
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -6140,7 +6239,8 @@ Options:
--show-group Include group column
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -6186,7 +6286,8 @@ Options:
reload changed it
--watch Execute periodically and showing output fullscreen
--json Output in JSON Format
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -6213,7 +6314,8 @@ Options:
millis or as a duration such as 30s
Default: 10000
--watch Execute periodically and showing output fullscreen
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
<name> Name or pid of running Camel integration
@@ -6253,7 +6355,8 @@ Options:
enter to exit). Without an interactive terminal the
default is false, unless --duration is given.
Default: true
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
--prefix=<prefix> Print prefix with running Camel integration name.
@@ -6367,12 +6470,14 @@ Options:
language expression in a route. (use :line-number
or
:id to refer to the exact location of the EIP to
use)
- --language=<language> The language to use for message transformation
+ --language=<language>
+ The language to use for message transformation
--component=<component>
The component to use for message transformation
--dataformat=<dataformat>
The dataformat to use for message transformation
- --template=<template> The template to use for message transformation
+ --template=<template>
+ The template to use for message transformation
(prefix with file: to refer to loading template
from
file)
--option=<option> Option for additional configuration of the used
@@ -6405,7 +6510,8 @@ Options:
--fresh Make sure we use fresh (i.e. non-cached) resources
Default: false
--watch Execute periodically and showing output fullscreen
- --duration=<duration> How long to keep watching or following, in millis
or
+ --duration=<duration>
+ How long to keep watching or following, in millis
or
as a duration such as 30s (default: until Enter is
pressed)
@@ -6678,7 +6784,8 @@ Options:
-h, --help Display this help and exit
--camel-version=<camel-version>
Camel version to pin (defaults to current version)
- --repo-url=<repo-url> Maven repository URL for downloading the launcher
+ --repo-url=<repo-url>
+ Maven repository URL for downloading the launcher
Default: https://repo1.maven.org/maven2
--dir, --directory=<dir>
Directory where wrapper files will be created
@@ -6744,7 +6851,7 @@ stderr:
== camel get route --sort
exit: 2
stderr:
- ERROR: Option sort was specified, but no value was given.
+ ERROR: Option --sort was specified, but no value was given.
Usage: camel get route [-h] [--sort=<sort>] [--source] [--remote]
[--short-uri]
[--wide-uri] [--limit=<limit>]
[--filter-mean=<filter-mean>] [--running]
diff --git
a/dsl/camel-jbang/camel-launcher/src/main/java/org/apache/camel/dsl/jbang/launcher/selfupdate/SelfUpdateCommand.java
b/dsl/camel-jbang/camel-launcher/src/main/java/org/apache/camel/dsl/jbang/launcher/selfupdate/SelfUpdateCommand.java
index 9c27f7a1db1b..d5abe19e9c3a 100644
---
a/dsl/camel-jbang/camel-launcher/src/main/java/org/apache/camel/dsl/jbang/launcher/selfupdate/SelfUpdateCommand.java
+++
b/dsl/camel-jbang/camel-launcher/src/main/java/org/apache/camel/dsl/jbang/launcher/selfupdate/SelfUpdateCommand.java
@@ -46,16 +46,19 @@ import org.apache.camel.util.FileUtil;
" camel self-update --version SNAPSHOT",
" camel self-update --check",
"",
- "An install pinned with the web installer's
--version X.Y.Z never moves; one pinned with",
- "--version X.Y or --version LTS moves to the newest
release of that line, or the newest LTS.",
+ "An install pinned with the web installer's
--version X.Y.Z never moves; one",
+ "pinned with --version X.Y or --version LTS moves
to the newest release of that",
+ "line, or the newest LTS.",
"",
- "--version SNAPSHOT (main) or X.Y.Z-SNAPSHOT
installs the newest nightly build from the Apache",
- "snapshot repository, and pins it, so camel
self-update follows the nightly builds. Nightly",
- "builds are development builds for testing, not
Apache releases. A nightly build of a",
- "maintenance branch is updated by re-running the
installer with --version X.Y.Z-SNAPSHOT.",
+ "--version SNAPSHOT (main) or X.Y.Z-SNAPSHOT
installs the newest nightly build",
+ "from the Apache snapshot repository, and pins it,
so camel self-update follows",
+ "the nightly builds. Nightly builds are development
builds for testing, not",
+ "Apache releases. A nightly build of a maintenance
branch is updated by",
+ "re-running the installer with --version
X.Y.Z-SNAPSHOT.",
"",
- "--version switches the pin to another selector:
SNAPSHOT, X.Y.Z-SNAPSHOT, one nightly build",
- "(which never moves), LTS or X.Y. --version X.Y.Z
installs that release without a pin." })
+ "--version switches the pin to another selector:
SNAPSHOT, X.Y.Z-SNAPSHOT, one",
+ "nightly build (which never moves), LTS or X.Y.
--version X.Y.Z installs that",
+ "release without a pin." })
public class SelfUpdateCommand extends CamelCommand {
@Option(name = "version",
diff --git a/parent/pom.xml b/parent/pom.xml
index 315c4ba604b1..a421f5d81cd4 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -61,7 +61,7 @@
<activemq-version>5.19.11</activemq-version>
<activemq6-version>6.3.2</activemq6-version>
<activemq-artemis-version>2.57.0</activemq-artemis-version>
- <aesh-version>3.19</aesh-version>
+ <aesh-version>3.19.1</aesh-version>
<agroal-version>3.2.1</agroal-version>
<allegro-converter-version>0.3.0</allegro-converter-version>
<alibabacloud-oss-version>0.6.1</alibabacloud-oss-version>