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 <claus.ib...@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; } - } }