Federico Mariani created CAMEL-23335:
----------------------------------------
Summary: Lazy-load JBang plugins only when the command actually
needs them
Key: CAMEL-23335
URL: https://issues.apache.org/jira/browse/CAMEL-23335
Project: Camel
Issue Type: Improvement
Components: camel-jbang
Affects Versions: 4.19.0
Reporter: Federico Mariani
Currently, _PluginHelper.addPlugins()_ calls _getActivePlugins()_ which
downloads and instantiates all configured plugins on every CLI invocation,
regardless of whether the target command needs them. This adds unnecessary
overhead for built-in commands that don't interact with plugins (e.g., camel
get, camel version, camel ps).
Plugins interact with the CLI in two distinct ways:
1. *Direct invocation* — the plugin registers its own top-level command via
_Plugin.customize()_ (e.g., _camel forage run_). The plugin is only needed when
target matches the plugin's command name.
2. *Indirect contribution* — the plugin provides a _PluginRunCustomizer_
and/or _PluginExporter_ that hook into camel run and camel export. For example,
the forage plugin's _PluginRunCustomizer.beforeRun()_ resolves config
directories, and its _PluginExporter.getDependencies()_ contributes runtime
dependencies. These are invoked inside _Run.java_ and _ExportBaseCommand.java_
via a second call to _getActivePlugins()_.
The optimization would be:
- In _addPlugins()_: skip _getActivePlugins()_ entirely when target is a known
built-in command that doesn't use plugins (e.g., get, version, ps, trace, top,
log, etc.). Only download plugins when target matches a plugin command, or when
target is a command that uses the Plugin SPI (run, export, cmd, script,
transform).
- In _Run.java_ / _ExportBaseCommand.java_: the existing _getActivePlugins()_
calls remain, as they are needed for PluginRunCustomizer and PluginExporter.
These are already gated by --skip-plugins.
This would make commands like camel get or camel version completely unaffected
by installed plugins
--
This message was sent by Atlassian Jira
(v8.20.10#820010)