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:47:57 UTC
[camel] branch main updated: 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 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 <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 ++++++++++++++++++----
.../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<>();