This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch backport/CAMEL-24388-4.22.x in repository https://gitbox.apache.org/repos/asf/camel.git
commit 8a1c2ab624c28d68060dbc8d424cec345e39b0db Author: Claus Ibsen <[email protected]> AuthorDate: Thu Aug 13 11:26:07 2026 +0200 CAMEL-24388: Guard against duplicate plugin subcommand registration Co-Authored-By: Claude Opus 4.6 <[email protected]> --- .../org/apache/camel/dsl/jbang/core/common/PluginHelper.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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 a28c5c7c9eb7..1638540992c9 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 @@ -170,8 +170,9 @@ public final class PluginHelper { // Maven resolution for plugins unrelated to the current command. Map<String, Plugin> plugins = getActivePlugins(main, repos, target); for (Map.Entry<String, Plugin> plugin : plugins.entrySet()) { - // Skip if this plugin was already loaded from embedded plugins - if (foundEmbeddedPlugins && commandLine.getSubcommands().containsKey(plugin.getKey())) { + // Skip if this plugin command is already registered (e.g. loaded from embedded plugins, + // or stale JSON config listing a plugin that is now built-in) + if (commandLine.getSubcommands().containsKey(plugin.getKey())) { continue; } @@ -756,6 +757,11 @@ public final class PluginHelper { } } + // Skip if this plugin command is already registered + if (command != null && commandLine.getSubcommands().containsKey(command)) { + return true; + } + plugin.customize(commandLine, main); return true; }
