This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push: new 51a6bf30eef CAMEL-18710: camel-jbang - Only include kamelets JARs if kamelets are in use 51a6bf30eef is described below commit 51a6bf30eefe3e6932aad9467b7222160b98f507 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Thu Nov 10 17:22:10 2022 +0100 CAMEL-18710: camel-jbang - Only include kamelets JARs if kamelets are in use --- .../camel/dsl/jbang/core/commands/ExportBaseCommand.java | 10 ++++++---- .../java/org/apache/camel/dsl/jbang/core/commands/Run.java | 9 +++++++++ .../apache/camel/main/download/DependencyDownloader.java | 11 +++++++---- .../camel/main/download/DependencyDownloaderKamelet.java | 13 +++++++++++++ .../org/apache/camel/main/download/DownloadListener.java | 7 +++++++ .../camel/main/download/MavenDependencyDownloader.java | 8 ++++++++ 6 files changed, 50 insertions(+), 8 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 88f7cb9aa90..d3e6eb49071 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 @@ -196,6 +196,7 @@ abstract class ExportBaseCommand extends CamelCommand { } List<String> lines = Files.readAllLines(settings.toPath()); + boolean kamelets = lines.stream().anyMatch(l -> l.startsWith("kamelet=")); for (String line : lines) { if (line.startsWith("dependency=")) { String v = StringHelper.after(line, "dependency="); @@ -203,11 +204,12 @@ abstract class ExportBaseCommand extends CamelCommand { // we let quarkus compile boolean skip = v == null || v.contains("org.apache.camel:camel-core-languages") || v.contains("org.apache.camel:camel-java-joor-dsl") - || v.contains("camel-endpointdsl"); + || v.contains("camel-endpointdsl") + || !kamelets && v.contains("org.apache.camel:camel-kamelet"); if (!skip) { answer.add(v); } - if (v != null && v.contains("org.apache.camel:camel-kamelet")) { + if (kamelets && v != null && v.contains("org.apache.camel:camel-kamelet")) { // include yaml-dsl and kamelet catalog if we use kamelets answer.add("camel:yaml-dsl"); answer.add("org.apache.camel.kamelets:camel-kamelets:" + kameletsVersion); @@ -217,7 +219,7 @@ abstract class ExportBaseCommand extends CamelCommand { String deps = StringHelper.after(line, "camel.jbang.dependencies="); for (String d : deps.split(",")) { answer.add(d.trim()); - if (d.contains("org.apache.camel:camel-kamelet")) { + if (kamelets && d.contains("org.apache.camel:camel-kamelet")) { // include yaml-dsl and kamelet catalog if we use kamelets answer.add("camel:yaml-dsl"); answer.add("org.apache.camel.kamelets:camel-kamelets:" + kameletsVersion); @@ -250,7 +252,7 @@ abstract class ExportBaseCommand extends CamelCommand { } } } - } else if (line.startsWith("camel.component.kamelet.location=")) { + } else if (kamelets && line.startsWith("camel.component.kamelet.location=")) { // include kamelet catalog if we use kamelets answer.add("mvn:org.apache.camel.kamelets:camel-kamelets:" + kameletsVersion); answer.add("mvn:org.apache.camel.kamelets:camel-kamelets-utils:" + kameletsVersion); 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 dfccbb856ff..41fe9f132ec 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 @@ -309,6 +309,7 @@ class Run extends CamelCommand { final KameletMain main = createMainInstance(); final Set<String> downloaded = new HashSet<>(); + final Set<String> kamelets = new HashSet<>(); main.setRepos(repos); main.setDownload(download); main.setFresh(fresh); @@ -332,6 +333,14 @@ class Run extends CamelCommand { // we want to register everything onDownloadDependency(groupId, artifactId, version); } + + @Override + public void onLoadingKamelet(String name) { + if (!kamelets.contains(name)) { + writeSettings("kamelet", name); + kamelets.add(name); + } + } }); main.setAppName("Apache Camel (JBang)"); diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloader.java index 9296d653da2..3c3bb7ef622 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloader.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloader.java @@ -62,8 +62,6 @@ public interface DependencyDownloader extends CamelContextAware, StaticService { /** * Configure location of Maven settings.xml file - * - * @param mavenSettings */ void setMavenSettings(String mavenSettings); @@ -71,8 +69,6 @@ public interface DependencyDownloader extends CamelContextAware, StaticService { /** * Configure location of Maven settings-security.xml file - * - * @param mavenSettingsSecurity */ void setMavenSettingsSecurity(String mavenSettingsSecurity); @@ -124,4 +120,11 @@ public interface DependencyDownloader extends CamelContextAware, StaticService { */ boolean alreadyOnClasspath(String groupId, String artifactId, String version); + /** + * When a kamelet is being loaded + * + * @param name the kamelet name + */ + void onLoadingKamelet(String name); + } diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderKamelet.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderKamelet.java index baaa9f25dca..2a51675e01f 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderKamelet.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderKamelet.java @@ -30,6 +30,7 @@ import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.kamelet.KameletComponent; import org.apache.camel.dsl.yaml.YamlRoutesBuilderLoaderSupport; import org.apache.camel.dsl.yaml.common.YamlDeserializationContext; +import org.apache.camel.dsl.yaml.common.YamlDeserializerSupport; import org.apache.camel.spi.Resource; import org.apache.camel.spi.RouteTemplateLoaderListener; import org.apache.camel.support.service.ServiceHelper; @@ -53,11 +54,19 @@ public final class DependencyDownloaderKamelet extends ServiceSupport private static final String KAMELETS_VERSION = "0.9.2"; private KameletDependencyDownloader downloader; private CamelContext camelContext; + private volatile boolean kameletsInUse; public DependencyDownloaderKamelet(CamelContext camelContext) { this.camelContext = camelContext; } + /** + * Whether any kamelets are in use. + */ + public boolean isKameletsInUse() { + return kameletsInUse; + } + @Override public CamelContext getCamelContext() { return camelContext; @@ -143,6 +152,10 @@ public final class DependencyDownloaderKamelet extends ServiceSupport @Override protected RouteBuilder builder(YamlDeserializationContext ctx, Node node) { + Node name = nodeAt(node, "/metadata/name"); + String text = YamlDeserializerSupport.asText(name); + downloader.onLoadingKamelet(text); + final List<String> dependencies = new ArrayList<>(); // always include kamelets-utils dependencies.add("org.apache.camel.kamelets:camel-kamelets-utils:" + kameletsVersion); diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadListener.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadListener.java index 28f62644a7a..482bd1b889f 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadListener.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadListener.java @@ -38,4 +38,11 @@ public interface DownloadListener { */ void onAlreadyDownloadedDependency(String groupId, String artifactId, String version); + /** + * When a kamelet is being downloaded (typically loaded directly from camel-kamelets JAR) + */ + default void onLoadingKamelet(String name) { + // noop + } + } diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java index eaf5ecba2d5..3a3d4699104 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java @@ -471,6 +471,14 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende return false; } + @Override + public void onLoadingKamelet(String name) { + // trigger listener + for (DownloadListener listener : downloadListeners) { + listener.onLoadingKamelet(name); + } + } + @Override protected void doBuild() throws Exception { if (classLoader == null && camelContext != null) {