This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-4.0.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.0.x by this push:
new 2941d69517f CAMEL-19798: Consistently set camel-kamelets version in
Camel JBang (#11270)
2941d69517f is described below
commit 2941d69517f118893de71407b1a4f49262680365
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Sep 1 12:17:00 2023 +0200
CAMEL-19798: Consistently set camel-kamelets version in Camel JBang (#11270)
- 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
Co-authored-by: Christoph Deppisch <[email protected]>
---
.../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;
+ }
}