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 <[email protected]> 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; + } }
