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 2021/11/17 09:26:58 UTC

[camel] branch main updated: CAMEL-17201: camel-kamelet-main - Auto download JARs for new components/dataformats/languages in use when using regular routes

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 58cd594  CAMEL-17201: camel-kamelet-main - Auto download JARs for new components/dataformats/languages in use when using regular routes
58cd594 is described below

commit 58cd59412523a86a96893d8040e79e1fa6732afc
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Nov 17 10:25:53 2021 +0100

    CAMEL-17201: camel-kamelet-main - Auto download JARs for new components/dataformats/languages in use when using regular routes
---
 .../org/apache/camel/main/DownloaderHelper.java    |  9 ++++
 .../org/apache/camel/main/KameletYamlRoutes.java   | 60 +++-------------------
 2 files changed, 17 insertions(+), 52 deletions(-)

diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloaderHelper.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloaderHelper.java
index 32e639d..d0aea06 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloaderHelper.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloaderHelper.java
@@ -31,6 +31,7 @@ import org.slf4j.LoggerFactory;
 public final class DownloaderHelper {
 
     private static final Logger LOG = LoggerFactory.getLogger(DownloaderHelper.class);
+    private static final String CP = System.getProperty("java.class.path");
 
     private DownloaderHelper() {
     }
@@ -51,6 +52,14 @@ public final class DownloaderHelper {
     }
 
     public static boolean alreadyOnClasspath(CamelContext camelContext, String artifactId) {
+        if (CP != null) {
+            // is it already on classpath
+            if (CP.contains(artifactId)) {
+                // already on classpath
+                return true;
+            }
+        }
+
         if (camelContext.getApplicationContextClassLoader() != null) {
             ClassLoader cl = camelContext.getApplicationContextClassLoader();
             if (cl instanceof URLClassLoader) {
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletYamlRoutes.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletYamlRoutes.java
index f91fa2c..93f6c71 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletYamlRoutes.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletYamlRoutes.java
@@ -16,22 +16,15 @@
  */
 package org.apache.camel.main;
 
-import java.net.URL;
-import java.net.URLClassLoader;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
-import groovy.grape.Grape;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.dsl.yaml.YamlRoutesBuilderLoaderSupport;
-import org.apache.camel.util.StopWatch;
-import org.apache.camel.util.TimeUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.snakeyaml.engine.v2.nodes.Node;
@@ -101,8 +94,8 @@ class KameletYamlRoutes extends YamlRoutesBuilderLoaderSupport implements CamelC
         for (String dep : dependencies) {
             String gav = dep;
             if (dep.startsWith("camel:")) {
-                // its a known camel component
-                gav = "mvn:org.apache.camel:camel-" + dep.substring(6) + ":" + camelContext.getVersion();
+                // it's a known camel component
+                gav = "org.apache.camel:camel-" + dep.substring(6) + ":" + camelContext.getVersion();
             }
             if (isValidGav(gav)) {
                 gavs.add(gav);
@@ -111,22 +104,12 @@ class KameletYamlRoutes extends YamlRoutesBuilderLoaderSupport implements CamelC
 
         if (!gavs.isEmpty()) {
             for (String gav : gavs) {
-                StopWatch watch = new StopWatch();
                 MavenGav mg = MavenGav.parseGav(gav);
                 if (mg.getVersion() == null) {
                     mg.setVersion(camelContext.getVersion());
                 }
-                Map<String, Object> map = new HashMap<>();
-                map.put("classLoader", camelContext.getApplicationContextClassLoader());
-                map.put("group", mg.getGroupId());
-                map.put("module", mg.getArtifactId());
-                map.put("version", mg.getVersion());
-                map.put("classifier", "");
-
-                LOG.debug("Downloading dependency: {}", mg);
-                Grape.grab(map);
+                DownloaderHelper.downloadDependency(camelContext, mg.getGroupId(), mg.getArtifactId(), mg.getVersion());
                 downloaded.add(gav);
-                LOG.info("Downloaded dependency: {} took: {}", mg, TimeUtils.printDuration(watch.taken()));
             }
         }
     }
@@ -138,41 +121,14 @@ class KameletYamlRoutes extends YamlRoutesBuilderLoaderSupport implements CamelC
         }
 
         // skip camel-core and camel-kamelet as they are already included
-        if (gav.startsWith("mvn:org.apache.camel:camel-core") || gav.startsWith("mvn:org.apache.camel:camel-kamelet:")) {
+        if (gav.contains("org.apache.camel:camel-core") || gav.contains("org.apache.camel:camel-kamelet:")) {
             return false;
         }
 
-        String[] arr = gav.split(":");
-        String name = null;
-        if (arr.length == 4) {
-            String aid = arr[2];
-            String v = arr[3];
-            name = aid + "-" + v + ".jar";
-        }
-
-        if (name != null && cp != null) {
-            // is it already on classpath
-            if (cp.contains(name)) {
-                // already on classpath
-                return false;
-            }
-        }
-
-        if (name != null && camelContext.getApplicationContextClassLoader() != null) {
-            ClassLoader cl = camelContext.getApplicationContextClassLoader();
-            if (cl instanceof URLClassLoader) {
-                URLClassLoader ucl = (URLClassLoader) cl;
-                for (URL u : ucl.getURLs()) {
-                    String s = u.toString();
-                    if (s.contains(name)) {
-                        // already on classpath
-                        return false;
-                    }
-                }
-            }
-        }
-
-        return true;
+        MavenGav mg = MavenGav.parseGav(gav);
+        boolean exists = DownloaderHelper.alreadyOnClasspath(camelContext, mg.getArtifactId());
+        // valid if not already on classpath
+        return !exists;
     }
 
 }