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 064bee0da8c CAMEL-18603: camel-jbang - run with kamelets classloading issue 064bee0da8c is described below commit 064bee0da8c8a608b3c6d54bd9645c04e0dbe016 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 ++++++++++++++++++---- .../main/download/MavenDependencyDownloader.java | 33 ++---------------- 5 files changed, 38 insertions(+), 39 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 d0ff0d7bca7..10a7a36eef5 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 7bea892a39a..84baa24e8eb 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.19.0}@pom //DEPS org.apache.camel:camel-jbang-core:${camel.jbang.version:3.19.0} //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 7bea892a39a..84baa24e8eb 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.19.0}@pom //DEPS org.apache.camel:camel-jbang-core:${camel.jbang.version:3.19.0} //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; } - } } diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java index d54ebabc326..224cdc6d262 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java @@ -555,11 +555,6 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende /** * Configure entire {@link RepositorySystem} service - * - * @param registry - * @param systemProperties - * @param settingsSecurityLocation - * @return */ public RepositorySystem configureRepositorySystem( DIRegistry registry, @@ -573,9 +568,6 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende /** * Configure the basic, necessary requirements of {@link RepositorySystem} in {@link DIRegistry} - * - * @param registry - * @param systemProperties */ private static void basicRepositorySystemConfiguration(DIRegistry registry, Properties systemProperties) { // this is the first one registered in DefaultServiceLocator - what follows up is BFS dependencies @@ -656,9 +648,6 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende /** * Configure the transport related requirements of {@link RepositorySystem} in {@link DIRegistry} - * - * @param registry - * @param systemProperties */ private static void transportConfiguration(DIRegistry registry, Properties systemProperties) { // in order to resolve the artifacts we need some connector factories @@ -711,9 +700,6 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende /** * Configure the Maven services in {@link DIRegistry} needed to process {@link Settings Maven settings} - * - * @param registry - * @param localSettingsSecurity */ private static void settingsConfiguration(DIRegistry registry, String localSettingsSecurity) { // before getting/creating an org.eclipse.aether.RepositorySystemSession, we need settings as a source @@ -743,12 +729,6 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende /** * Using the configured {@link DIRegistry}, load {@link Settings Maven settings} - * - * @param registry - * @param repositorySystem - * @param systemProperties - * @param mavenSettings - * @return */ public Settings mavenConfiguration( DIRegistry registry, RepositorySystem repositorySystem, @@ -815,12 +795,6 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende /** * Using the configured {@link DIRegistry}, obtain thread-safe {@link RepositorySystemSession} used to resolve and * download Maven dependencies. - * - * @param registry - * @param systemProperties - * @param settings - * @param localRepository - * @return */ public RepositorySystemSession configureRepositorySystemSession( DIRegistry registry, @@ -1071,10 +1045,9 @@ public class MavenDependencyDownloader extends ServiceSupport implements Depende * during Maven resolution. These repositories are <b>not yet</b> mirrored/proxied. Use * {@link RepositorySystem#newResolutionRepositories} first. * - * @param settings - * @param repos optional, comma-separated list of URLs - * @param fresh whether to check for remote updates of the artifacts (SNAPSHOTs) - * @return + * @param settings maven settings + * @param repos optional, comma-separated list of URLs + * @param fresh whether to check for remote updates of the artifacts (SNAPSHOTs) */ public List<RemoteRepository> configureRemoteRepositories(Settings settings, String repos, boolean fresh) { List<RemoteRepository> repositories = new ArrayList<>();