This is an automated email from the ASF dual-hosted git repository.
fmariani pushed a commit to branch camel-4.18.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.18.x by this push:
new 3dd34067ec6c CAMEL-23157: Allow plugins to contribute dependencies to
the Run command
3dd34067ec6c is described below
commit 3dd34067ec6c5b5d0ec17892ed30f0a981fc5d4e
Author: Croway <[email protected]>
AuthorDate: Mon Mar 9 21:52:10 2026 +0100
CAMEL-23157: Allow plugins to contribute dependencies to the Run command
---
.../ROOT/pages/jbang-commands/camel-jbang-debug.adoc | 2 +-
.../ROOT/pages/jbang-commands/camel-jbang-run.adoc | 2 +-
.../META-INF/camel-jbang-commands-metadata.json | 4 ++--
.../org/apache/camel/dsl/jbang/core/commands/Run.java | 19 ++++++++++++++++++-
.../camel/dsl/jbang/core/common/PluginHelper.java | 6 +++---
5 files changed, 25 insertions(+), 8 deletions(-)
diff --git
a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-debug.adoc
b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-debug.adoc
index f7bcff1d740b..e56d29f27a38 100644
--- a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-debug.adoc
+++ b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-debug.adoc
@@ -83,7 +83,7 @@ camel debug [options]
| `--show-exchange-properties` | Show exchange properties in debug messages |
false | boolean
| `--show-exchange-variables` | Show exchange variables in debug messages |
true | boolean
| `--show-headers` | Show message headers in debug messages | true | boolean
-| `--skip-plugins` | Skip plugins during export | false | boolean
+| `--skip-plugins` | Skip resolving plugin dependencies | false | boolean
| `--source` | Prefer to display source filename/code instead of IDs | |
boolean
| `--source-dir` | Source directory for dynamically loading Camel file(s) to
run. When using this, then files cannot be specified at the same time. | |
String
| `--spring-boot-version` | Spring Boot version |
RuntimeType.SPRING_BOOT_VERSION | String
diff --git
a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-run.adoc
b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-run.adoc
index 51f62b485982..8d5576320735 100644
--- a/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-run.adoc
+++ b/docs/user-manual/modules/ROOT/pages/jbang-commands/camel-jbang-run.adoc
@@ -71,7 +71,7 @@ camel run [options]
| `--reload,--dev` | Enables dev mode (live reload when source files are
updated and saved) | | boolean
| `--repo,--repos` | Additional maven repositories (Use commas to separate
multiple repositories) | | String
| `--runtime` | Runtime () | camel-main | RuntimeType
-| `--skip-plugins` | Skip plugins during export | false | boolean
+| `--skip-plugins` | Skip resolving plugin dependencies | false | boolean
| `--source-dir` | Source directory for dynamically loading Camel file(s) to
run. When using this, then files cannot be specified at the same time. | |
String
| `--spring-boot-version` | Spring Boot version |
RuntimeType.SPRING_BOOT_VERSION | String
| `--stub` | Stubs all the matching endpoint uri with the given component name
or pattern. Multiple names can be separated by comma. (all = stub all
endpoints). | | String
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 581921c6b448..5ef23c6148f8 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
@@ -5,7 +5,7 @@
{ "name": "cmd", "fullName": "cmd", "description": "Performs commands in
the running Camel integrations, such as start\/stop route, or change logging
levels.", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.action.CamelAction", "options": [ {
"names": "-h,--help", "description": "Display the help and sub-commands",
"javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name":
"browse", "fullName": "cmd browse", "description": "Browse pending messages on
endpoints [...]
{ "name": "completion", "fullName": "completion", "description": "Generate
completion script for bash\/zsh", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.Complete", "options": [ { "names":
"-h,--help", "description": "Display the help and sub-commands", "javaType":
"boolean", "type": "boolean" } ] },
{ "name": "config", "fullName": "config", "description": "Get and set user
configuration values", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.config.ConfigCommand", "options": [ {
"names": "-h,--help", "description": "Display the help and sub-commands",
"javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "get",
"fullName": "config get", "description": "Display user configuration value",
"sourceClass": "org.apache.camel.dsl.jbang.core.commands.config. [...]
- { "name": "debug", "fullName": "debug", "description": "Debug local Camel
integration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Debug",
"options": [ { "names": "--ago", "description": "Use ago instead of yyyy-MM-dd
HH:mm:ss in timestamp.", "javaType": "boolean", "type": "boolean" }, { "names":
"--background", "description": "Run in the background", "defaultValue":
"false", "javaType": "boolean", "type": "boolean" }, { "names":
"--background-wait", "description": "To [...]
+ { "name": "debug", "fullName": "debug", "description": "Debug local Camel
integration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Debug",
"options": [ { "names": "--ago", "description": "Use ago instead of yyyy-MM-dd
HH:mm:ss in timestamp.", "javaType": "boolean", "type": "boolean" }, { "names":
"--background", "description": "Run in the background", "defaultValue":
"false", "javaType": "boolean", "type": "boolean" }, { "names":
"--background-wait", "description": "To [...]
{ "name": "dependency", "fullName": "dependency", "description": "Displays
all Camel dependencies required to run", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.DependencyCommand", "options": [ {
"names": "-h,--help", "description": "Display the help and sub-commands",
"javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name":
"copy", "fullName": "dependency copy", "description": "Copies all Camel
dependencies required to run to a specific directory", "sourc [...]
{ "name": "dirty", "fullName": "dirty", "description": "Check if there are
dirty files from previous Camel runs that did not terminate gracefully",
"sourceClass": "org.apache.camel.dsl.jbang.core.commands.process.Dirty",
"options": [ { "names": "--clean", "description": "Clean dirty files which are
no longer in use", "defaultValue": "false", "javaType": "boolean", "type":
"boolean" }, { "names": "-h,--help", "description": "Display the help and
sub-commands", "javaType": "boolean", " [...]
{ "name": "doc", "fullName": "doc", "description": "Shows documentation
for kamelet, component, and other Camel resources", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.catalog.CatalogDoc", "options": [ {
"names": "--camel-version", "description": "To use a different Camel version
than the default version", "javaType": "java.lang.String", "type": "string" },
{ "names": "--download", "description": "Whether to allow automatic downloading
JAR dependencies (over the internet [...]
@@ -22,7 +22,7 @@
{ "name": "nano", "fullName": "nano", "description": "Nano editor to edit
file", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Nano",
"options": [ { "names": "-h,--help", "description": "Display the help and
sub-commands", "javaType": "boolean", "type": "boolean" } ] },
{ "name": "plugin", "fullName": "plugin", "description": "Manage plugins
that add sub-commands to this CLI", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.plugin.PluginCommand", "options": [ {
"names": "-h,--help", "description": "Display the help and sub-commands",
"javaType": "boolean", "type": "boolean" } ], "subcommands": [ { "name": "add",
"fullName": "plugin add", "description": "Add new plugin", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.plugin.PluginA [...]
{ "name": "ps", "fullName": "ps", "description": "List running Camel
integrations", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.process.ListProcess", "options": [ {
"names": "--json", "description": "Output in JSON Format", "javaType":
"boolean", "type": "boolean" }, { "names": "--pid", "description": "List only
pid in the output", "javaType": "boolean", "type": "boolean" }, { "names":
"--remote", "description": "Break down counters into remote\/total pairs",
"javaType": [...]
- { "name": "run", "fullName": "run", "description": "Run as local Camel
integration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Run",
"options": [ { "names": "--background", "description": "Run in the background",
"defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names":
"--background-wait", "description": "To wait for run in background to startup
successfully, before returning", "defaultValue": "true", "javaType": "boolean",
"type": "boolean" }, { [...]
+ { "name": "run", "fullName": "run", "description": "Run as local Camel
integration", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Run",
"options": [ { "names": "--background", "description": "Run in the background",
"defaultValue": "false", "javaType": "boolean", "type": "boolean" }, { "names":
"--background-wait", "description": "To wait for run in background to startup
successfully, before returning", "defaultValue": "true", "javaType": "boolean",
"type": "boolean" }, { [...]
{ "name": "sbom", "fullName": "sbom", "description": "Generate a CycloneDX
or SPDX SBOM for a specific project", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.SBOMGenerator", "options": [ {
"names": "--build-property", "description": "Maven\/Gradle build properties,
ex. --build-property=prop1=foo", "javaType": "java.util.List", "type": "array"
}, { "names": "--build-tool", "description": "DEPRECATED: Build tool to use
(maven or gradle) (gradle is deprecated)", "defaultValu [...]
{ "name": "script", "fullName": "script", "description": "Run Camel
integration as shell script for terminal scripting", "sourceClass":
"org.apache.camel.dsl.jbang.core.commands.Script", "options": [ { "names":
"--logging", "description": "Can be used to turn on logging (logs to file in
<user home>\/.camel directory)", "defaultValue": "false", "javaType":
"boolean", "type": "boolean" }, { "names": "--logging-level", "description":
"Logging level ()", "defaultValue": "info", "javaType [...]
{ "name": "shell", "fullName": "shell", "description": "Interactive Camel
JBang shell.", "sourceClass": "org.apache.camel.dsl.jbang.core.commands.Shell",
"options": [ { "names": "-h,--help", "description": "Display the help and
sub-commands", "javaType": "boolean", "type": "boolean" } ] },
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 45686e240080..9727961632fb 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
@@ -45,6 +45,9 @@ import org.apache.camel.catalog.DefaultCamelCatalog;
import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
import org.apache.camel.dsl.jbang.core.common.LauncherHelper;
import org.apache.camel.dsl.jbang.core.common.LoggingLevelCompletionCandidates;
+import org.apache.camel.dsl.jbang.core.common.Plugin;
+import org.apache.camel.dsl.jbang.core.common.PluginExporter;
+import org.apache.camel.dsl.jbang.core.common.PluginHelper;
import org.apache.camel.dsl.jbang.core.common.Printer;
import org.apache.camel.dsl.jbang.core.common.PropertyResolver;
import org.apache.camel.dsl.jbang.core.common.RuntimeCompletionCandidates;
@@ -362,7 +365,7 @@ public class Run extends CamelCommand {
boolean prompt;
@Option(names = { "--skip-plugins" }, defaultValue = "false",
- description = "Skip plugins during export")
+ description = "Skip resolving plugin dependencies")
boolean skipPlugins;
public Run(CamelJBangMain main) {
@@ -986,6 +989,20 @@ public class Run extends CamelCommand {
// Add runtime-specific dependencies
addRuntimeSpecificDependenciesFromProperties(profileProperties);
+ // Add plugin dependencies
+ if (!skipPlugins) {
+ Set<PluginExporter> exporters =
PluginHelper.getActivePlugins(getMain(), repositories).values()
+ .stream()
+ .map(Plugin::getExporter)
+ .filter(Optional::isPresent)
+ .map(Optional::get)
+ .collect(Collectors.toSet());
+
+ for (PluginExporter exporter : exporters) {
+
addDependencies(exporter.getDependencies(runtime).toArray(String[]::new));
+ }
+ }
+
if (observe) {
dependencies.add("camel:observability-services");
}
diff --git
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginHelper.java
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginHelper.java
index b212b647e21d..3263d7138c2a 100644
---
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginHelper.java
+++
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/PluginHelper.java
@@ -183,7 +183,7 @@ public final class PluginHelper {
final String group = extractGroup(mavenGav, "org.apache.camel");
final String depVersion = extractVersion(mavenGav, defaultVersion);
- plugin = downloadPlugin(name, depVersion, group, repos, printer);
+ plugin = downloadPlugin(name, defaultVersion, depVersion, group,
repos, printer);
}
return plugin;
@@ -212,7 +212,7 @@ public final class PluginHelper {
}
private static Optional<Plugin> downloadPlugin(
- String command, String version, String group, String repos,
Printer printer) {
+ String command, String camelVersion, String version, String group,
String repos, Printer printer) {
DependencyDownloader downloader = new MavenDependencyDownloader();
DependencyDownloaderClassLoader ddlcl = new
DependencyDownloaderClassLoader(PluginHelper.class.getClassLoader());
downloader.setClassLoader(ddlcl);
@@ -221,7 +221,7 @@ public final class PluginHelper {
}
downloader.start();
// downloads and adds to the classpath
-
downloader.downloadDependencyWithParent("org.apache.camel:camel-jbang-parent:"
+ version, group,
+
downloader.downloadDependencyWithParent("org.apache.camel:camel-jbang-parent:pom:"
+ camelVersion, group,
"camel-jbang-plugin-" + command, version);
Optional<Plugin> instance = Optional.empty();
InputStream in = null;