This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch plugin3 in repository https://gitbox.apache.org/repos/asf/camel.git
commit acecb0c5182161f4163c4caffd87845754ec73dd Author: Claus Ibsen <[email protected]> AuthorDate: Tue Dec 16 14:59:25 2025 +0100 CAMEL-22765: camel-jbang - Loading custom jbang plugins should support downloading from 3rd party maven repositories specified via --repos --- .../dsl/jbang/core/commands/ExportBaseCommand.java | 6 ++-- .../camel/dsl/jbang/core/common/PluginHelper.java | 41 ++++++++++++++++++---- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java index 823c7c59087d..8783e4e3a4a7 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java @@ -399,7 +399,7 @@ public abstract class ExportBaseCommand extends CamelCommand { Properties properties = mapBuildProperties(); if (!skipPlugins) { - Set<PluginExporter> exporters = PluginHelper.getActivePlugins(getMain()).values() + Set<PluginExporter> exporters = PluginHelper.getActivePlugins(getMain(), repositories).values() .stream() .map(Plugin::getExporter) .filter(Optional::isPresent) @@ -597,7 +597,7 @@ public abstract class ExportBaseCommand extends CamelCommand { } if (!skipPlugins) { - Set<PluginExporter> exporters = PluginHelper.getActivePlugins(getMain()).values() + Set<PluginExporter> exporters = PluginHelper.getActivePlugins(getMain(), repositories).values() .stream() .map(Plugin::getExporter) .filter(Optional::isPresent) @@ -777,7 +777,7 @@ public abstract class ExportBaseCommand extends CamelCommand { } if (!skipPlugins) { - Set<PluginExporter> exporters = PluginHelper.getActivePlugins(getMain()).values() + Set<PluginExporter> exporters = PluginHelper.getActivePlugins(getMain(), repositories).values() .stream() .map(Plugin::getExporter) .filter(Optional::isPresent) 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 76281564eb1c..8ab86bbaa614 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 @@ -84,6 +84,30 @@ public final class PluginHelper { // Ignore errors in embedded plugin loading } + // allow to download plugins from 3rd party maven repositories by --repos argument + String repos = null; + try { + for (String a : args) { + if (a.startsWith("--repos=")) { + repos = a.substring(8).trim(); + } else if (a.startsWith("--repo=")) { + repos = a.substring(7).trim(); + } + } + } catch (Exception e) { + // ignore + } + + if (repos == null) { + // fallback to load user configuration + Properties configProperties = new Properties(); + CommandLineHelper.loadProperties(configProperties::putAll); + repos = configProperties.getProperty("repos"); + if (repos == null) { + repos = configProperties.getProperty("repo"); + } + } + // If we found embedded plugins, and we're looking for a specific target, // check if it was satisfied by embedded plugins if (foundEmbeddedPlugins && target != null && !"shell".equals(target)) { @@ -94,7 +118,7 @@ public final class PluginHelper { } // Fall back to JSON configuration for additional or missing plugins - Map<String, Plugin> plugins = getActivePlugins(main); + Map<String, Plugin> plugins = getActivePlugins(main, repos); for (Map.Entry<String, Plugin> plugin : plugins.entrySet()) { // only load the plugin if the command-line is calling this plugin if (target != null && !"shell".equals(target) && !target.equals(plugin.getKey())) { @@ -115,9 +139,10 @@ public final class PluginHelper { * that the current Camel JBang version is able to execute the plugin. * * @param main to exit the CLI process in case of error + * @param repos custom maven repositories * @return map of plugins where key represents the plugin command and value the plugin instance. */ - public static Map<String, Plugin> getActivePlugins(CamelJBangMain main) { + public static Map<String, Plugin> getActivePlugins(CamelJBangMain main, String repos) { Map<String, Plugin> activePlugins = new HashMap<>(); JsonObject config = getPluginConfig(); if (config != null) { @@ -138,7 +163,7 @@ public final class PluginHelper { versionCheck(main, version, firstVersion, command); } - Optional<Plugin> plugin = getPlugin(command, version, gav, main.getOut()); + Optional<Plugin> plugin = getPlugin(command, version, gav, repos, main.getOut()); if (plugin.isPresent()) { activePlugins.put(command, plugin.get()); } else { @@ -151,14 +176,14 @@ public final class PluginHelper { return activePlugins; } - public static Optional<Plugin> getPlugin(String name, String defaultVersion, String gav, Printer printer) { + public static Optional<Plugin> getPlugin(String name, String defaultVersion, String gav, String repos, Printer printer) { Optional<Plugin> plugin = FACTORY_FINDER.newInstance("camel-jbang-plugin-" + name, Plugin.class); if (plugin.isEmpty()) { final MavenGav mavenGav = dependencyAsMavenGav(gav); final String group = extractGroup(mavenGav, "org.apache.camel"); final String depVersion = extractVersion(mavenGav, defaultVersion); - plugin = downloadPlugin(name, depVersion, group, printer); + plugin = downloadPlugin(name, depVersion, group, repos, printer); } return plugin; @@ -186,10 +211,14 @@ public final class PluginHelper { } } - private static Optional<Plugin> downloadPlugin(String command, String version, String group, Printer printer) { + private static Optional<Plugin> downloadPlugin( + String command, String version, String group, String repos, Printer printer) { DependencyDownloader downloader = new MavenDependencyDownloader(); DependencyDownloaderClassLoader ddlcl = new DependencyDownloaderClassLoader(PluginHelper.class.getClassLoader()); downloader.setClassLoader(ddlcl); + if (repos != null && !repos.isBlank()) { + downloader.setRepositories(repos); + } downloader.start(); // downloads and adds to the classpath downloader.downloadDependencyWithParent("org.apache.camel:camel-jbang-parent:" + version, group,
