Christoph Deppisch created CAMEL-26764:
------------------------------------------

             Summary: camel-jbang - Let plugins decide per-command whether to 
add customizations and dependencies
                 Key: CAMEL-26764
                 URL: https://issues.apache.org/jira/browse/CAMEL-26764
             Project: Camel
          Issue Type: Improvement
          Components: camel-jbang
            Reporter: Christoph Deppisch


Currently, all configured active Camel JBang plugins add their customizations 
(subcommands, dependencies, exporters) whenever any command is executed. The 
{{Plugin.customize(CommandLine, CamelJBangMain)}} method receives no 
information about which command is actually being run, and 
{{PluginExporter}}/{{PluginRunCustomizer}} are applied during {{run}} and 
{{export}} regardless of whether the plugin is relevant to that invocation.

This causes problems when a plugin is configured with a version that differs 
from the core (e.g. a SNAPSHOT version) — the plugin's dependency resolution 
can fail and break unrelated commands that don't need the plugin at all.

The proposal is to let each plugin decide, based on the command being executed, 
whether it should add its customizations and dependencies. The rules would be:

* {{camel help}} — all plugins customize (so help text shows all available 
subcommands)
* {{camel <plugin-command> ...}} (e.g. {{camel test run}}) — the plugin 
customizes because it owns the command
* {{camel run}} — only plugins that have a {{PluginRunCustomizer}} or 
explicitly opt in should customize; a test plugin adding itself to a plain 
{{camel run}} does not make sense
* {{camel export}} — plugins that provide a {{PluginExporter}} should 
customize, since they participate in the export process
* Other built-in commands (e.g. {{camel ps}}, {{camel get}}) — plugins that 
don't contribute to these commands should stay out

This way, the set of active plugins for any given command represents the 
required minimum rather than the full static configuration.

A possible approach is to extend the {{Plugin}} interface with a method like 
{{boolean appliesTo(String command)}} or pass the target command into 
{{customize()}}, so each plugin can make an informed decision.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to