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;
}