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/10/12 13:47:57 UTC

[camel] branch main updated: CAMEL-18603: camel-jbang - run with kamelets classloading issue

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 064bee0da8c CAMEL-18603: camel-jbang - run with kamelets classloading issue
064bee0da8c is described below

commit 064bee0da8c8a608b3c6d54bd9645c04e0dbe016
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Oct 12 15:47:36 2022 +0200

    CAMEL-18603: camel-jbang - run with kamelets classloading issue
---
 .../dsl/jbang/core/commands/ExportBaseCommand.java |  2 ++
 .../camel-jbang-main/dist/CamelJBang.java          |  1 -
 .../src/main/jbang/main/CamelJBang.java            |  1 -
 .../main/download/DependencyDownloaderKamelet.java | 40 ++++++++++++++++++----
 .../main/download/MavenDependencyDownloader.java   | 33 ++----------------
 5 files changed, 38 insertions(+), 39 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 d0ff0d7bca7..10a7a36eef5 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
@@ -194,6 +194,7 @@ abstract class ExportBaseCommand extends CamelCommand {
                     // include yaml-dsl and kamelet catalog if we use kamelets
                     answer.add("camel:yaml-dsl");
                     answer.add("org.apache.camel.kamelets:camel-kamelets:" + kameletsVersion);
+                    answer.add("org.apache.camel.kamelets:camel-kamelets-utils:" + kameletsVersion);
                 }
             } else if (line.startsWith("camel.jbang.dependencies=")) {
                 String deps = StringHelper.after(line, "camel.jbang.dependencies=");
@@ -235,6 +236,7 @@ abstract class ExportBaseCommand extends CamelCommand {
             } else if (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-main/dist/CamelJBang.java b/dsl/camel-jbang/camel-jbang-main/dist/CamelJBang.java
index 7bea892a39a..84baa24e8eb 100755
--- a/dsl/camel-jbang/camel-jbang-main/dist/CamelJBang.java
+++ b/dsl/camel-jbang/camel-jbang-main/dist/CamelJBang.java
@@ -22,7 +22,6 @@
 //DEPS org.apache.camel:camel-bom:${camel.jbang.version:3.19.0}@pom
 //DEPS org.apache.camel:camel-jbang-core:${camel.jbang.version:3.19.0}
 //DEPS org.apache.camel.kamelets:camel-kamelets:${camel-kamelets.version:0.9.0}
-//DEPS org.apache.camel.kamelets:camel-kamelets-utils:${camel-kamelets.version:0.9.0}
 
 package main;
 
diff --git a/dsl/camel-jbang/camel-jbang-main/src/main/jbang/main/CamelJBang.java b/dsl/camel-jbang/camel-jbang-main/src/main/jbang/main/CamelJBang.java
index 7bea892a39a..84baa24e8eb 100755
--- a/dsl/camel-jbang/camel-jbang-main/src/main/jbang/main/CamelJBang.java
+++ b/dsl/camel-jbang/camel-jbang-main/src/main/jbang/main/CamelJBang.java
@@ -22,7 +22,6 @@
 //DEPS org.apache.camel:camel-bom:${camel.jbang.version:3.19.0}@pom
 //DEPS org.apache.camel:camel-jbang-core:${camel.jbang.version:3.19.0}
 //DEPS org.apache.camel.kamelets:camel-kamelets:${camel-kamelets.version:0.9.0}
-//DEPS org.apache.camel.kamelets:camel-kamelets-utils:${camel-kamelets.version:0.9.0}
 
 package main;
 
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 5c8f0c37a56..b4fe5aa461c 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
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.main.download;
 
+import java.lang.management.ManagementFactory;
+import java.lang.management.RuntimeMXBean;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -32,6 +34,7 @@ import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.RouteTemplateLoaderListener;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.support.service.ServiceSupport;
+import org.apache.camel.util.StringHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.snakeyaml.engine.v2.nodes.Node;
@@ -47,12 +50,12 @@ import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.nodeAt;
 public final class DependencyDownloaderKamelet extends ServiceSupport
         implements CamelContextAware, RouteTemplateLoaderListener {
 
-    private final KameletDependencyDownloader downloader;
+    private static final String KAMELETS_VERSION = "0.9.0";
+    private KameletDependencyDownloader downloader;
     private CamelContext camelContext;
 
     public DependencyDownloaderKamelet(CamelContext camelContext) {
         this.camelContext = camelContext;
-        this.downloader = new KameletDependencyDownloader(camelContext, "yaml");
     }
 
     @Override
@@ -69,13 +72,18 @@ public final class DependencyDownloaderKamelet extends ServiceSupport
     protected void doBuild() throws Exception {
         KameletComponent kc = camelContext.getComponent("kamelet", KameletComponent.class);
         kc.setRouteTemplateLoaderListener(this);
-
-        downloader.setCamelContext(camelContext);
-        ServiceHelper.buildService(downloader);
     }
 
     @Override
     protected void doInit() throws Exception {
+        String version = KAMELETS_VERSION;
+        RuntimeMXBean mb = ManagementFactory.getRuntimeMXBean();
+        if (mb != null) {
+            String[] bootClasspath = mb.getClassPath().split("[:|;]");
+            version = extractKameletsVersion(bootClasspath);
+        }
+        this.downloader = new KameletDependencyDownloader(camelContext, "yaml", version);
+        this.downloader.setCamelContext(camelContext);
         ServiceHelper.initService(downloader);
     }
 
@@ -100,6 +108,21 @@ public final class DependencyDownloaderKamelet extends ServiceSupport
         }
     }
 
+    private static String extractKameletsVersion(String[] bootClasspath) {
+        if (bootClasspath != null) {
+            for (String s : bootClasspath) {
+                if (s.contains("camel-kamelets-")) {
+                    String version = StringHelper.after(s, "camel-kamelets-");
+                    version = StringHelper.before(version, ".jar");
+                    if (version != null) {
+                        return version;
+                    }
+                }
+            }
+        }
+        return KAMELETS_VERSION;
+    }
+
     /**
      * To automatic downloaded dependencies that Kamelets requires.
      */
@@ -109,16 +132,20 @@ public final class DependencyDownloaderKamelet extends ServiceSupport
         private final CamelContext camelContext;
         private final DependencyDownloader downloader;
         private final Set<String> downloaded = new HashSet<>();
+        private final String kameletsVersion;
 
-        public KameletDependencyDownloader(CamelContext camelContext, String extension) {
+        public KameletDependencyDownloader(CamelContext camelContext, String extension, String kameletsVersion) {
             super(extension);
             this.camelContext = camelContext;
             this.downloader = camelContext.hasService(DependencyDownloader.class);
+            this.kameletsVersion = kameletsVersion;
         }
 
         @Override
         protected RouteBuilder builder(YamlDeserializationContext ctx, Node node) {
             final List<String> dependencies = new ArrayList<>();
+            // always include kamelets-utils
+            dependencies.add("org.apache.camel.kamelets:camel-kamelets-utils:" + kameletsVersion);
 
             Node deps = nodeAt(node, "/spec/dependencies");
             if (deps != null && deps.getNodeType() == NodeType.SEQUENCE) {
@@ -184,6 +211,5 @@ public final class DependencyDownloaderKamelet extends ServiceSupport
             // valid if not already on classpath
             return !exists;
         }
-
     }
 }
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 d54ebabc326..224cdc6d262 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
@@ -555,11 +555,6 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende
 
     /**
      * Configure entire {@link RepositorySystem} service
-     * 
-     * @param  registry
-     * @param  systemProperties
-     * @param  settingsSecurityLocation
-     * @return
      */
     public RepositorySystem configureRepositorySystem(
             DIRegistry registry,
@@ -573,9 +568,6 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende
 
     /**
      * Configure the basic, necessary requirements of {@link RepositorySystem} in {@link DIRegistry}
-     *
-     * @param registry
-     * @param systemProperties
      */
     private static void basicRepositorySystemConfiguration(DIRegistry registry, Properties systemProperties) {
         // this is the first one registered in DefaultServiceLocator - what follows up is BFS dependencies
@@ -656,9 +648,6 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende
 
     /**
      * Configure the transport related requirements of {@link RepositorySystem} in {@link DIRegistry}
-     *
-     * @param registry
-     * @param systemProperties
      */
     private static void transportConfiguration(DIRegistry registry, Properties systemProperties) {
         // in order to resolve the artifacts we need some connector factories
@@ -711,9 +700,6 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende
 
     /**
      * Configure the Maven services in {@link DIRegistry} needed to process {@link Settings Maven settings}
-     *
-     * @param registry
-     * @param localSettingsSecurity
      */
     private static void settingsConfiguration(DIRegistry registry, String localSettingsSecurity) {
         // before getting/creating an org.eclipse.aether.RepositorySystemSession, we need settings as a source
@@ -743,12 +729,6 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende
 
     /**
      * Using the configured {@link DIRegistry}, load {@link Settings Maven settings}
-     *
-     * @param  registry
-     * @param  repositorySystem
-     * @param  systemProperties
-     * @param  mavenSettings
-     * @return
      */
     public Settings mavenConfiguration(
             DIRegistry registry, RepositorySystem repositorySystem,
@@ -815,12 +795,6 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende
     /**
      * Using the configured {@link DIRegistry}, obtain thread-safe {@link RepositorySystemSession} used to resolve and
      * download Maven dependencies.
-     *
-     * @param  registry
-     * @param  systemProperties
-     * @param  settings
-     * @param  localRepository
-     * @return
      */
     public RepositorySystemSession configureRepositorySystemSession(
             DIRegistry registry,
@@ -1071,10 +1045,9 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende
      * during Maven resolution. These repositories are <b>not yet</b> mirrored/proxied. Use
      * {@link RepositorySystem#newResolutionRepositories} first.
      *
-     * @param  settings
-     * @param  repos    optional, comma-separated list of URLs
-     * @param  fresh    whether to check for remote updates of the artifacts (SNAPSHOTs)
-     * @return
+     * @param settings maven settings
+     * @param repos    optional, comma-separated list of URLs
+     * @param fresh    whether to check for remote updates of the artifacts (SNAPSHOTs)
      */
     public List<RemoteRepository> configureRemoteRepositories(Settings settings, String repos, boolean fresh) {
         List<RemoteRepository> repositories = new ArrayList<>();