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:52:58 UTC
[camel] 01/03: 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 camel-3.18.x
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 7b2985e92123348bfe2e880f45e42c9da5b6313f
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 ++++++++++++++++++----
4 files changed, 35 insertions(+), 9 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 12a741293f1..bc82eb9e4a5 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 d2df7b5ab34..4310369c751 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.18.1}@pom
//DEPS org.apache.camel:camel-jbang-core:${camel.jbang.version:3.18.1}
//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 d2df7b5ab34..4310369c751 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.18.1}@pom
//DEPS org.apache.camel:camel-jbang-core:${camel.jbang.version:3.18.1}
//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;
}
-
}
}