You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/11/10 16:24:19 UTC

[camel] branch main updated: CAMEL-18710: camel-jbang - Only include kamelets JARs if kamelets are in use

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 <cl...@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) {