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/09/01 10:15:33 UTC
[camel] 01/01: CAMEL-19798: Consistently set camel-kamelets version in Camel JBang
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch jbang401
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 51c284c583898b72fdb36249578ebf3fb81a4945
Author: Christoph Deppisch <cd...@redhat.com>
AuthorDate: Tue Aug 29 15:52:58 2023 +0200
CAMEL-19798: Consistently set camel-kamelets version in Camel JBang
- Avoids inconsistent versions on camel-kamelets dependencies (e.g. camel-kamelets-utils library)
- Make sure to use same version for camel-kamelets and camel-kamelets-utils dependency
- Add --kamelets-version setting on Camel JBang run command
- Propagate camel-kamelets version to KameletMain as initial property and use this version in Kamelet dependency downloader
- Fallback to deriving the camel-kamelets version from classpath only if version has not been set
- Support camel-kamelets: prefix when referencing dependencies in Kamelets and Pipe/KameletBinding resources and resolve with proper camel-kamelets version
---
.../dsl/jbang/core/commands/ExportBaseCommand.java | 7 +++-
.../apache/camel/dsl/jbang/core/commands/Init.java | 6 ++-
.../apache/camel/dsl/jbang/core/commands/Run.java | 21 ++++++++++
.../core/commands/catalog/CatalogKamelet.java | 7 +++-
.../camel/dsl/jbang/core/common/VersionHelper.java | 3 ++
.../templates/run-custom-camel-version.tmpl | 2 +-
.../java/org/apache/camel/main/KameletMain.java | 18 +++++++-
.../main/download/DependencyDownloaderKamelet.java | 44 ++++++++------------
.../download/DependencyDownloaderRoutesLoader.java | 8 +++-
.../download/KnownKameletRoutesBuilderLoader.java | 48 +++++++++++-----------
.../org/apache/camel/main/util/VersionHelper.java | 25 +++++++++++
11 files changed, 131 insertions(+), 58 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 89d024e23fe..c8054a0c2b3 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
@@ -47,6 +47,7 @@ import java.util.stream.Collectors;
import org.apache.camel.catalog.DefaultCamelCatalog;
import org.apache.camel.dsl.jbang.core.common.RuntimeCompletionCandidates;
import org.apache.camel.dsl.jbang.core.common.RuntimeUtil;
+import org.apache.camel.dsl.jbang.core.common.VersionHelper;
import org.apache.camel.tooling.maven.MavenGav;
import org.apache.camel.util.CamelCaseOrderedProperties;
import org.apache.camel.util.FileUtil;
@@ -108,7 +109,7 @@ abstract class ExportBaseCommand extends CamelCommand {
protected String camelVersion;
@CommandLine.Option(names = {
- "--kamelets-version" }, description = "Apache Camel Kamelets version", defaultValue = "4.0.0-RC1")
+ "--kamelets-version" }, description = "Apache Camel Kamelets version")
protected String kameletsVersion;
@CommandLine.Option(names = { "--local-kamelet-dir" },
@@ -281,6 +282,10 @@ abstract class ExportBaseCommand extends CamelCommand {
return o1.compareTo(o2);
});
+ if (kameletsVersion == null) {
+ kameletsVersion = VersionHelper.extractKameletsVersion();
+ }
+
// custom dependencies
if (dependencies != null) {
for (String d : dependencies.split(",")) {
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
index 75f46f30290..2264980c80c 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Init.java
@@ -26,6 +26,7 @@ import java.util.StringJoiner;
import org.apache.camel.CamelContext;
import org.apache.camel.dsl.jbang.core.commands.catalog.KameletCatalogHelper;
import org.apache.camel.dsl.jbang.core.common.ResourceDoesNotExist;
+import org.apache.camel.dsl.jbang.core.common.VersionHelper;
import org.apache.camel.github.GistResourceResolver;
import org.apache.camel.github.GitHubResourceResolver;
import org.apache.camel.impl.DefaultCamelContext;
@@ -60,7 +61,7 @@ public class Init extends CamelCommand {
private String fromKamelet;
@Option(names = {
- "--kamelets-version" }, description = "Apache Camel Kamelets version", defaultValue = "4.0.0-RC1")
+ "--kamelets-version" }, description = "Apache Camel Kamelets version")
private String kameletsVersion;
@Option(names = { "--integration" },
@@ -95,6 +96,9 @@ public class Init extends CamelCommand {
InputStream is = null;
if ("kamelet.yaml".equals(ext)) {
if (fromKamelet != null) {
+ if (kameletsVersion == null) {
+ kameletsVersion = VersionHelper.extractKameletsVersion();
+ }
// load existing kamelet
is = KameletCatalogHelper.loadKameletYamlSchema(fromKamelet, kameletsVersion);
} else if (file.contains("source")) {
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
index 6e56380f37b..cda6ac22697 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
@@ -129,6 +129,9 @@ public class Run extends CamelCommand {
@Option(names = { "--camel-version" }, description = "To run using a different Camel version than the default version.")
String camelVersion;
+ @Option(names = { "--kamelets-version" }, description = "Apache Camel Kamelets version")
+ String kameletsVersion;
+
@Option(names = { "--profile" }, scope = CommandLine.ScopeType.INHERIT, defaultValue = "application",
description = "Profile to use, which refers to loading properties file with the given profile name. By default application.properties is loaded.")
String profile;
@@ -439,6 +442,8 @@ public class Run extends CamelCommand {
writeSetting(main, profileProperties, "camel.jbang.jfr", jfr || jfrProfile != null ? "jfr" : null); // TODO: "true" instead of "jfr" ?
writeSetting(main, profileProperties, "camel.jbang.jfr-profile", jfrProfile != null ? jfrProfile : null);
+ writeSetting(main, profileProperties, "camel.jbang.kameletsVersion", kameletsVersion);
+
StringJoiner js = new StringJoiner(",");
StringJoiner sjReload = new StringJoiner(",");
StringJoiner sjClasspathFiles = new StringJoiner(",");
@@ -703,8 +708,13 @@ public class Run extends CamelCommand {
background = "true".equals(answer.getProperty("camel.jbang.background", background ? "true" : "false"));
jvmDebug = "true".equals(answer.getProperty("camel.jbang.jvmDebug", jvmDebug ? "true" : "false"));
camelVersion = answer.getProperty("camel.jbang.camel-version", camelVersion);
+ kameletsVersion = answer.getProperty("camel.jbang.kameletsVersion", kameletsVersion);
gav = answer.getProperty("camel.jbang.gav", gav);
}
+
+ if (kameletsVersion == null) {
+ kameletsVersion = VersionHelper.extractKameletsVersion();
+ }
return answer;
}
@@ -718,6 +728,9 @@ public class Run extends CamelCommand {
if (camelVersion != null) {
cmds.remove("--camel-version=" + camelVersion);
}
+ if (kameletsVersion != null) {
+ cmds.remove("--kamelets-version=" + kameletsVersion);
+ }
// need to use jbang command to specify camel version
List<String> jbangArgs = new ArrayList<>();
jbangArgs.add("jbang");
@@ -725,6 +738,9 @@ public class Run extends CamelCommand {
if (camelVersion != null) {
jbangArgs.add("-Dcamel.jbang.version=" + camelVersion);
}
+ if (kameletsVersion != null) {
+ jbangArgs.add("-Dcamel-kamelets.version=" + kameletsVersion);
+ }
if (jvmDebug) {
jbangArgs.add("--debug"); // jbang --debug
cmds.remove("--jvm-debug");
@@ -799,6 +815,10 @@ public class Run extends CamelCommand {
}
content = content.replaceFirst("\\{\\{ \\.CamelJBangDependencies }}", sb.toString());
+ sb = new StringBuilder();
+ sb.append(String.format("//DEPS org.apache.camel.kamelets:camel-kamelets:%s\n", kameletsVersion));
+ content = content.replaceFirst("\\{\\{ \\.CamelKameletsDependencies }}", sb.toString());
+
String fn = WORK_DIR + "/CustomCamelJBang.java";
Files.write(Paths.get(fn), content.getBytes(StandardCharsets.UTF_8));
@@ -816,6 +836,7 @@ public class Run extends CamelCommand {
}
cmds.remove("--camel-version=" + camelVersion);
+ cmds.remove("--kamelets-version=" + kameletsVersion);
// need to use jbang command to specify camel version
List<String> jbangArgs = new ArrayList<>();
jbangArgs.add("jbang");
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogKamelet.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogKamelet.java
index e9ab75b38e1..2a80520a5e6 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogKamelet.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogKamelet.java
@@ -29,6 +29,7 @@ import com.github.freva.asciitable.Column;
import com.github.freva.asciitable.HorizontalAlign;
import org.apache.camel.dsl.jbang.core.commands.CamelCommand;
import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
+import org.apache.camel.dsl.jbang.core.common.VersionHelper;
import org.apache.camel.main.download.DependencyDownloaderClassLoader;
import org.apache.camel.main.download.MavenDependencyDownloader;
import org.apache.camel.support.ObjectHelper;
@@ -52,7 +53,7 @@ public class CatalogKamelet extends CamelCommand {
String filterName;
@CommandLine.Option(names = {
- "--kamelets-version" }, description = "Apache Camel Kamelets version", defaultValue = "4.0.0-RC1")
+ "--kamelets-version" }, description = "Apache Camel Kamelets version")
String kameletsVersion;
public CatalogKamelet(CamelJBangMain main) {
@@ -63,6 +64,10 @@ public class CatalogKamelet extends CamelCommand {
public Integer doCall() throws Exception {
List<KameletModel> rows = new ArrayList<>();
+ if (kameletsVersion == null) {
+ kameletsVersion = VersionHelper.extractKameletsVersion();
+ }
+
Map<String, Object> kamelets;
try {
ClassLoader cl = createClassLoader();
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/VersionHelper.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/VersionHelper.java
index b2362cc445d..b5024359174 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/VersionHelper.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/VersionHelper.java
@@ -111,4 +111,7 @@ public final class VersionHelper {
return s.compareTo(t);
}
+ public static String extractKameletsVersion() {
+ return org.apache.camel.main.util.VersionHelper.extractKameletsVersion();
+ }
}
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/run-custom-camel-version.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/run-custom-camel-version.tmpl
index c707abfb58c..e8843fa8509 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/run-custom-camel-version.tmpl
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/run-custom-camel-version.tmpl
@@ -22,7 +22,7 @@
//REPOS central=https://repo1.maven.org/maven2,apache-snapshot=http://repository.apache.org/content/groups/snapshots/
{{ .CamelDependencies }}
{{ .CamelJBangDependencies }}
-//DEPS org.apache.camel.kamelets:camel-kamelets:${camel-kamelets.version:4.0.0-RC1}
+{{ .CamelKameletsDependencies }}
package main;
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 a6c4580f7d9..b16680ea7ec 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
@@ -518,7 +518,12 @@ public class KameletMain extends MainCommandLineSupport {
}
answer.setInjector(new KameletMainInjector(answer.getInjector(), stub));
if (download) {
- answer.addService(new DependencyDownloaderKamelet(answer));
+ Object kameletsVersion = getInitialProperties().get("camel.jbang.kameletsVersion");
+ if (kameletsVersion != null) {
+ answer.addService(new DependencyDownloaderKamelet(answer, kameletsVersion.toString()));
+ } else {
+ answer.addService(new DependencyDownloaderKamelet(answer));
+ }
answer.getCamelContextExtension().getRegistry().bind(DownloadModelineParser.class.getSimpleName(),
new DownloadModelineParser(answer));
}
@@ -607,9 +612,18 @@ public class KameletMain extends MainCommandLineSupport {
@Override
protected void configureRoutesLoader(CamelContext camelContext) {
if (download) {
+ DependencyDownloaderRoutesLoader routesLoader;
+
+ Object kameletsVersion = getInitialProperties().get("camel.jbang.kameletsVersion");
+ if (kameletsVersion != null) {
+ routesLoader = new DependencyDownloaderRoutesLoader(camelContext, kameletsVersion.toString());
+ } else {
+ routesLoader = new DependencyDownloaderRoutesLoader(camelContext);
+ }
+
// use resolvers that can auto downloaded
camelContext.getCamelContextExtension()
- .addContextPlugin(RoutesLoader.class, new DependencyDownloaderRoutesLoader(camelContext));
+ .addContextPlugin(RoutesLoader.class, routesLoader);
} else {
super.configureRoutesLoader(camelContext);
}
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 919daa13914..3955166ed44 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,8 +16,6 @@
*/
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;
@@ -31,12 +29,12 @@ import org.apache.camel.component.kamelet.KameletComponent;
import org.apache.camel.dsl.yaml.YamlRoutesBuilderLoaderSupport;
import org.apache.camel.dsl.yaml.common.YamlDeserializationContext;
import org.apache.camel.dsl.yaml.common.YamlDeserializerSupport;
+import org.apache.camel.main.util.VersionHelper;
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.tooling.maven.MavenGav;
-import org.apache.camel.util.StringHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.snakeyaml.engine.v2.nodes.Node;
@@ -52,12 +50,17 @@ import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.nodeAt;
public final class DependencyDownloaderKamelet extends ServiceSupport
implements CamelContextAware, RouteTemplateLoaderListener {
- private static final String KAMELETS_VERSION = "3.20.4";
+ private String kameletsVersion;
private KameletDependencyDownloader downloader;
private CamelContext camelContext;
public DependencyDownloaderKamelet(CamelContext camelContext) {
+ this(camelContext, null);
+ }
+
+ public DependencyDownloaderKamelet(CamelContext camelContext, String kameletsVersion) {
this.camelContext = camelContext;
+ this.kameletsVersion = kameletsVersion;
}
@Override
@@ -78,13 +81,11 @@ public final class DependencyDownloaderKamelet extends ServiceSupport
@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);
+ if (kameletsVersion == null) {
+ kameletsVersion = VersionHelper.extractKameletsVersion();
}
- this.downloader = new KameletDependencyDownloader(camelContext, "yaml", version);
+
+ this.downloader = new KameletDependencyDownloader(camelContext, "yaml", kameletsVersion);
this.downloader.setCamelContext(camelContext);
ServiceHelper.initService(downloader);
}
@@ -110,21 +111,6 @@ 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.
*/
@@ -152,8 +138,6 @@ public final class DependencyDownloaderKamelet extends ServiceSupport
}
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) {
@@ -189,7 +173,11 @@ public final class DependencyDownloaderKamelet extends ServiceSupport
String gav = dep;
if (dep.startsWith("camel:")) {
// it's a known camel component
- gav = "org.apache.camel:camel-" + dep.substring(6) + ":" + camelContext.getVersion();
+ gav = "org.apache.camel:camel-" + dep.substring("camel:".length()) + ":" + camelContext.getVersion();
+ } else if (dep.startsWith("camel-kamelets:")) {
+ // it's a known camel kamelets dependency
+ gav = "org.apache.camel.kamelets:camel-kamelets-" + dep.substring("camel-kamelets:".length()) + ":"
+ + kameletsVersion;
}
if (isValidGav(gav)) {
gavs.add(gav);
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderRoutesLoader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderRoutesLoader.java
index a4cdd2ac87c..421a6c39868 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderRoutesLoader.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderRoutesLoader.java
@@ -31,10 +31,16 @@ import org.apache.camel.support.service.ServiceHelper;
public class DependencyDownloaderRoutesLoader extends DefaultRoutesLoader {
private final DependencyDownloader downloader;
+ private final String kameletsVersion;
public DependencyDownloaderRoutesLoader(CamelContext camelContext) {
+ this(camelContext, null);
+ }
+
+ public DependencyDownloaderRoutesLoader(CamelContext camelContext, String kameletsVersion) {
setCamelContext(camelContext);
this.downloader = camelContext.hasService(DependencyDownloader.class);
+ this.kameletsVersion = kameletsVersion;
}
@Override
@@ -65,7 +71,7 @@ public class DependencyDownloaderRoutesLoader extends DefaultRoutesLoader {
// special for kamelet as we want to track loading kamelets
RoutesBuilderLoader loader;
if (KameletRoutesBuilderLoader.EXTENSION.equals(extension)) {
- loader = new KnownKameletRoutesBuilderLoader();
+ loader = new KnownKameletRoutesBuilderLoader(kameletsVersion);
CamelContextAware.trySetCamelContext(loader, getCamelContext());
// allows for custom initialization
initRoutesBuilderLoader(loader);
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/KnownKameletRoutesBuilderLoader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/KnownKameletRoutesBuilderLoader.java
index 709f9ea5652..1e6588379e7 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/KnownKameletRoutesBuilderLoader.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/KnownKameletRoutesBuilderLoader.java
@@ -19,12 +19,11 @@ package org.apache.camel.main.download;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.dsl.yaml.KameletRoutesBuilderLoader;
import org.apache.camel.main.util.SuggestSimilarHelper;
+import org.apache.camel.main.util.VersionHelper;
import org.apache.camel.spi.Resource;
import org.apache.camel.support.ObjectHelper;
import org.apache.camel.util.FileUtil;
@@ -32,7 +31,11 @@ import org.apache.camel.util.ReflectionHelper;
public class KnownKameletRoutesBuilderLoader extends KameletRoutesBuilderLoader {
- private static final String CP = System.getProperty("java.class.path");
+ private String kameletsVersion;
+
+ public KnownKameletRoutesBuilderLoader(String kameletsVersion) {
+ this.kameletsVersion = kameletsVersion;
+ }
@Override
public RouteBuilder doLoadRouteBuilder(Resource resource) throws Exception {
@@ -52,27 +55,26 @@ public class KnownKameletRoutesBuilderLoader extends KameletRoutesBuilderLoader
private List<String> findKameletNames() {
// download kamelet catalog for the correct version
- Pattern pattern = Pattern.compile("camel-kamelets-(\\d+.\\d+.\\d+).jar", Pattern.DOTALL);
- Matcher matcher = pattern.matcher(CP);
- if (matcher.find() && matcher.groupCount() > 0) {
- String version = matcher.group(1);
- try {
- // dynamic download kamelets-catalog that has the known names
- MavenDependencyDownloader downloader = getCamelContext().hasService(MavenDependencyDownloader.class);
- if (!downloader.alreadyOnClasspath("org.apache.camel.kamelets", "camel-kamelets-catalog", version)) {
- downloader.downloadDependency("org.apache.camel.kamelets", "camel-kamelets-catalog", version);
- }
- // create an instance of the catalog and invoke its getKameletsName method
- Class<?> clazz = getCamelContext().getClassResolver()
- .resolveClass("org.apache.camel.kamelets.catalog.KameletsCatalog");
- if (clazz != null) {
- Object catalog = getCamelContext().getInjector().newInstance(clazz);
- Method m = ReflectionHelper.findMethod(clazz, "getKameletsName");
- return (List<String>) ObjectHelper.invokeMethod(m, catalog);
- }
- } catch (Exception e) {
- // ignore
+ if (kameletsVersion == null) {
+ kameletsVersion = VersionHelper.extractKameletsVersion();
+ }
+
+ try {
+ // dynamic download kamelets-catalog that has the known names
+ MavenDependencyDownloader downloader = getCamelContext().hasService(MavenDependencyDownloader.class);
+ if (!downloader.alreadyOnClasspath("org.apache.camel.kamelets", "camel-kamelets-catalog", kameletsVersion)) {
+ downloader.downloadDependency("org.apache.camel.kamelets", "camel-kamelets-catalog", kameletsVersion);
+ }
+ // create an instance of the catalog and invoke its getKameletsName method
+ Class<?> clazz = getCamelContext().getClassResolver()
+ .resolveClass("org.apache.camel.kamelets.catalog.KameletsCatalog");
+ if (clazz != null) {
+ Object catalog = getCamelContext().getInjector().newInstance(clazz);
+ Method m = ReflectionHelper.findMethod(clazz, "getKameletsName");
+ return (List<String>) ObjectHelper.invokeMethod(m, catalog);
}
+ } catch (Exception e) {
+ // ignore
}
return Collections.emptyList();
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/util/VersionHelper.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/util/VersionHelper.java
index 5ada3e4c766..b8b0bf230a4 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/util/VersionHelper.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/util/VersionHelper.java
@@ -16,10 +16,19 @@
*/
package org.apache.camel.main.util;
+import java.lang.management.ManagementFactory;
+import java.lang.management.RuntimeMXBean;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
import org.apache.camel.util.StringHelper;
public final class VersionHelper {
+ private static final String KAMELETS_DEFAULT_VERSION = "4.0.0-RC1";
+ private static final Pattern KAMELETS_LIBRARY = Pattern.compile("camel-kamelets-(\\d[A-Z\\d.-]*).jar", Pattern.DOTALL);
+ private static final String CP = System.getProperty("java.class.path");
+
private VersionHelper() {
}
@@ -83,4 +92,20 @@ public final class VersionHelper {
return s.compareTo(t);
}
+ public static String extractKameletsVersion() {
+ Matcher matcher = KAMELETS_LIBRARY.matcher(CP);
+ if (matcher.find() && matcher.groupCount() > 0) {
+ return matcher.group(1);
+ }
+
+ RuntimeMXBean mb = ManagementFactory.getRuntimeMXBean();
+ if (mb != null) {
+ matcher = KAMELETS_LIBRARY.matcher(mb.getClassPath());
+ if (matcher.find() && matcher.groupCount() > 0) {
+ return matcher.group(1);
+ }
+ }
+
+ return KAMELETS_DEFAULT_VERSION;
+ }
}