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 2023/03/02 09:19:28 UTC

[camel] branch camel-3.20.x updated: CAMEL-19093: camel-jbang - Run local JAR should add to classpath so can be used in Java DSL

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch camel-3.20.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-3.20.x by this push:
     new 281c95aa311 CAMEL-19093: camel-jbang - Run local JAR should add to classpath so can be used in Java DSL
281c95aa311 is described below

commit 281c95aa3114b01310f1cfa8bbcfd0f65c3fc22a
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Mar 2 10:17:29 2023 +0100

    CAMEL-19093: camel-jbang - Run local JAR should add to classpath so can be used in Java DSL
---
 .../java/org/apache/camel/main/KameletMain.java    | 32 ++++++++++++++++++++--
 .../camel/main/util/ExtraFilesClassLoader.java     |  5 ++--
 2 files changed, 32 insertions(+), 5 deletions(-)

diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
index 9c31b64fba1..3d486c8ac48 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
@@ -16,7 +16,10 @@
  */
 package org.apache.camel.main;
 
+import java.io.File;
+import java.util.ArrayList;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
@@ -468,15 +471,38 @@ public class KameletMain extends MainCommandLineSupport {
 
     protected ClassLoader createApplicationContextClassLoader() {
         if (classLoader == null) {
+            // jars need to be added to dependency downloader classloader
+            List<String> jars = new ArrayList<>();
             // create class loader (that are download capable) only once
             // any additional files to add to classpath
             ClassLoader parentCL = KameletMain.class.getClassLoader();
             String cpFiles = getInitialProperties().getProperty("camel.jbang.classpathFiles");
             if (cpFiles != null) {
-                parentCL = new ExtraFilesClassLoader(parentCL, cpFiles.split(","));
-                LOG.info("Additional files added to classpath: {}", cpFiles);
+                String[] arr = cpFiles.split(",");
+                List<String> files = new ArrayList<>();
+                for (String s : arr) {
+                    if (s.endsWith(".jar")) {
+                        jars.add(s);
+                    } else {
+                        files.add(s);
+                    }
+                }
+                if (!files.isEmpty()) {
+                    parentCL = new ExtraFilesClassLoader(parentCL, files);
+                    LOG.info("Additional files added to classpath: {}", String.join(", ", files));
+                }
+            }
+            DependencyDownloaderClassLoader cl = new DependencyDownloaderClassLoader(parentCL);
+            if (!jars.isEmpty()) {
+                for (String jar : jars) {
+                    File f = new File(jar).getAbsoluteFile();
+                    if (f.isFile() && f.exists()) {
+                        cl.addFile(f);
+                    }
+                }
+                LOG.info("Additional jars added to classpath: {}", String.join(", ", jars));
             }
-            classLoader = new DependencyDownloaderClassLoader(parentCL);
+            classLoader = cl;
         }
         return classLoader;
     }
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/util/ExtraFilesClassLoader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/util/ExtraFilesClassLoader.java
index 884ae63b6c2..fc1a0a5993c 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/util/ExtraFilesClassLoader.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/util/ExtraFilesClassLoader.java
@@ -19,15 +19,16 @@ package org.apache.camel.main.util;
 import java.io.File;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.List;
 
 /**
  * Classloader used to load the extra files that were present in the CLI arguments
  */
 public final class ExtraFilesClassLoader extends ClassLoader {
 
-    final String[] files;
+    final List<String> files;
 
-    public ExtraFilesClassLoader(ClassLoader parent, String[] files) {
+    public ExtraFilesClassLoader(ClassLoader parent, List<String> files) {
         super(parent);
         this.files = files;
     }