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 a875bea8b54c CAMEL-20455: camel-jbang - Download kamelets only when in 
use (#19795)
a875bea8b54c is described below

commit a875bea8b54c55a0d7c2a021d4578fbed4f82352
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Nov 6 19:20:24 2025 +0100

    CAMEL-20455: camel-jbang - Download kamelets only when in use (#19795)
    
    * CAMEL-20455: camel-jbang - Download kamelets only when in use
    * CAMEL-20455: camel-jbang - Download kamelets only when in use. Add back 
DEPS until we have 4.17.0 released
---
 .../apache/camel/support/RouteTemplateHelper.java  | 11 +++++++++--
 .../ROOT/pages/camel-4x-upgrade-guide-4_17.adoc    | 11 ++++++++++-
 .../modules/ROOT/pages/camel-4x-upgrade-guide.adoc |  1 +
 .../camel/dsl/jbang/core/common/RuntimeType.java   |  1 +
 .../dsl/jbang/core/commands/ExportBaseCommand.java | 12 +++++++----
 .../apache/camel/dsl/jbang/core/commands/Run.java  | 20 ++++++++++++++++++-
 .../jbang/core/commands/catalog/CatalogDoc.java    |  5 +++--
 .../core/commands/catalog/CatalogKamelet.java      |  6 ++++--
 .../camel/dsl/jbang/core/commands/ExportTest.java  | 10 ++++++++++
 .../src/test/resources/use-source-route.yaml       | 23 ++++++++++++++++++++++
 .../src/test/resources/user-source.kamelet.yaml    |  1 +
 dsl/camel-kamelet-main/pom.xml                     | 12 +++++++++++
 .../src/main/docs/kamelet-main.adoc                | 22 +--------------------
 .../camel/main/util/KameletCatalogHelper.java      | 23 ++++++++++++++++++++++
 .../java/org/apache/camel/main/KameletMain.java    |  2 +-
 .../main/download/DependencyDownloaderKamelet.java | 10 ++++++++++
 .../download/KnownKameletRoutesBuilderLoader.java  | 20 +++++++++++++------
 .../org/apache/camel/main/util/VersionHelper.java  |  3 +--
 18 files changed, 151 insertions(+), 42 deletions(-)

diff --git 
a/core/camel-support/src/main/java/org/apache/camel/support/RouteTemplateHelper.java
 
b/core/camel-support/src/main/java/org/apache/camel/support/RouteTemplateHelper.java
index 8fb14497ba57..6744f782d1d3 100644
--- 
a/core/camel-support/src/main/java/org/apache/camel/support/RouteTemplateHelper.java
+++ 
b/core/camel-support/src/main/java/org/apache/camel/support/RouteTemplateHelper.java
@@ -102,8 +102,15 @@ public final class RouteTemplateHelper {
                 path += "/";
             }
             String target = path + templateId + ".kamelet.yaml";
-            PluginHelper.getRoutesLoader(camelContext).loadRoutes(
-                    resourceLoader.resolveResource(target));
+            Resource res = resourceLoader.resolveResource(target);
+            try {
+                if (listener != null) {
+                    listener.loadRouteTemplate(res);
+                }
+            } catch (Exception e) {
+                LOG.warn("RouteTemplateLoaderListener error due to {}. This 
exception is ignored", e.getMessage(), e);
+            }
+            PluginHelper.getRoutesLoader(camelContext).loadRoutes(res);
         }
     }
 }
diff --git 
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_17.adoc 
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_17.adoc
index 03e5dd2ba617..ea63708867c0 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_17.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_17.adoc
@@ -13,6 +13,15 @@ See the xref:camel-upgrade-recipes-tool.adoc[documentation] 
page for details.
 
 == Upgrading Camel 4.16 to 4.17
 
+=== camel-jbang
+
+The `camel-kamelets-catalog` JAR is now downloaded on-demand.
+The version of the Kamelets is now specified via `--kamelets-version` option 
(or via maven dependencies).
+The following option is no longer in use `-Dcamel-kamelets.version`.
+
+Removed automatic fallback to download Kamelet YAML files from GitHub. 
Instead, kamelets are
+now only loaded from embedded `camel-kamelets` JAR.
+
 === Component deprecation
 
-The component stomp is deprecated. The protocol and the used implementation 
has not received updates in the last ten years and tests started to fail with 
Artemis 2.43.
+The `camel-stomp` component is deprecated.
diff --git a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide.adoc 
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide.adoc
index 84932f87dce5..6ae540da19ca 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide.adoc
@@ -25,6 +25,7 @@ You can find the upgrade guide for each release in the 
following pages:
 - xref:camel-4x-upgrade-guide-4_14.adoc[Upgrade guide 4.13 -> 4.14]
 - xref:camel-4x-upgrade-guide-4_15.adoc[Upgrade guide 4.14 -> 4.15]
 - xref:camel-4x-upgrade-guide-4_16.adoc[Upgrade guide 4.15 -> 4.16]
+- xref:camel-4x-upgrade-guide-4_17.adoc[Upgrade guide 4.16 -> 4.17]
 
 [NOTE]
 ====
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java-templates/org/apache/camel/dsl/jbang/core/common/RuntimeType.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java-templates/org/apache/camel/dsl/jbang/core/common/RuntimeType.java
index 27ada0687dd4..e30ed9954495 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java-templates/org/apache/camel/dsl/jbang/core/common/RuntimeType.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java-templates/org/apache/camel/dsl/jbang/core/common/RuntimeType.java
@@ -28,6 +28,7 @@ public enum RuntimeType {
 
     public static final String QUARKUS_VERSION = "${quarkus-version}";
     public static final String SPRING_BOOT_VERSION = "${spring-boot-version}";
+    public static final String KAMELETS_VERSION = 
"${camel-kamelets-catalog-version}";
 
     public static RuntimeType fromValue(String value) {
         value = value.toLowerCase(Locale.ROOT);
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 dff88d944584..840e8d717adf 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
@@ -165,8 +165,9 @@ public abstract class ExportBaseCommand extends 
CamelCommand {
     protected String camelVersion;
 
     @CommandLine.Option(names = {
-            "--kamelets-version" }, description = "Apache Camel Kamelets 
version")
-    protected String kameletsVersion;
+            "--kamelets-version" }, description = "Apache Camel Kamelets 
version",
+                        defaultValue = RuntimeType.KAMELETS_VERSION)
+    protected String kameletsVersion = RuntimeType.KAMELETS_VERSION;
 
     @CommandLine.Option(names = { "--profile" }, scope = 
CommandLine.ScopeType.INHERIT,
                         description = "Profile to export (dev, test, or 
prod).")
@@ -472,12 +473,14 @@ public abstract class ExportBaseCommand extends 
CamelCommand {
                 boolean skip = v == null || 
v.contains("org.apache.camel:camel-core-languages")
                         || v.contains("org.apache.camel:camel-java-joor-dsl")
                         || v.contains("camel-endpointdsl")
+                        || 
(v.contains("org.apache.camel.kamelets:camel-kamelets"))
                         || !(kamelets) && 
v.contains("org.apache.camel:camel-kamelet");
                 if (!skip) {
                     answer.add(v);
                 }
                 if (kamelets && v != null && 
v.contains("org.apache.camel:camel-kamelet")) {
-                    // kamelets need yaml-dsl
+                    // kamelets also need yaml-dsl
+                    answer.add("camel:kamelet");
                     answer.add("camel:yaml-dsl");
                     if (asfKamelets) {
                         // include JARs for official ASF kamelets
@@ -493,7 +496,8 @@ public abstract class ExportBaseCommand extends 
CamelCommand {
                     for (String d : deps.split(",")) {
                         answer.add(d.trim());
                         if (kamelets && 
d.contains("org.apache.camel:camel-kamelet")) {
-                            // kamelets need yaml-dsl
+                            // kamelets also need yaml-dsl
+                            answer.add("camel:kamelet");
                             answer.add("camel:yaml-dsl");
                             if (asfKamelets) {
                                 // include JARs for official ASF kamelets
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 8e6330f37322..2a13a518833f 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
@@ -1431,6 +1431,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");
@@ -1439,7 +1442,11 @@ public class Run extends CamelCommand {
             jbangArgs.add("-Dcamel.jbang.version=" + camelVersion);
         }
         if (kameletsVersion != null) {
-            jbangArgs.add("-Dcamel-kamelets.version=" + kameletsVersion);
+            if (camelVersion != null && VersionHelper.isLE(camelVersion, 
"4.16.0")) {
+                jbangArgs.add("-Dcamel-kamelets.version=" + camelVersion);
+            } else {
+                cmds.add("--kamelets-version=" + kameletsVersion);
+            }
         }
         // tooling may signal to run JMX debugger in suspended mode via JVM 
system property
         // which we must include in args as well
@@ -1461,6 +1468,10 @@ public class Run extends CamelCommand {
         ProcessBuilder pb = new ProcessBuilder();
         pb.command(jbangArgs);
 
+        if (verbose) {
+            printer().println(String.join(" ", jbangArgs));
+        }
+
         if (background) {
             return runBackgroundProcess(pb, "Camel Main");
         } else {
@@ -1495,6 +1506,9 @@ public class Run extends CamelCommand {
         ProcessBuilder pb = new ProcessBuilder();
         pb.command(cmds);
 
+        if (verbose) {
+            printer().println(String.join(" ", cmds));
+        }
         return runBackgroundProcess(pb, "Camel Main");
     }
 
@@ -1642,6 +1656,10 @@ public class Run extends CamelCommand {
 
         jbangArgs.addAll(cmds);
 
+        if (verbose) {
+            printer().println(String.join(" ", jbangArgs));
+        }
+
         ProcessBuilder pb = new ProcessBuilder();
         pb.command(jbangArgs);
         if (background) {
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java
index 2188c5941b3c..41d76d4f76a2 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java
@@ -103,8 +103,9 @@ public class CatalogDoc extends CamelCommand {
     boolean headers;
 
     @CommandLine.Option(names = {
-            "--kamelets-version" }, description = "Apache Camel Kamelets 
version", defaultValue = "4.15.0")
-    String kameletsVersion;
+            "--kamelets-version" }, description = "Apache Camel Kamelets 
version",
+                        defaultValue = RuntimeType.KAMELETS_VERSION)
+    String kameletsVersion = RuntimeType.KAMELETS_VERSION;
 
     CamelCatalog catalog;
 
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 8635abf0ee6e..cccc22f80bb9 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.RuntimeType;
 import org.apache.camel.dsl.jbang.core.common.VersionHelper;
 import org.apache.camel.main.download.DependencyDownloaderClassLoader;
 import org.apache.camel.main.download.MavenDependencyDownloader;
@@ -53,8 +54,9 @@ public class CatalogKamelet extends CamelCommand {
     String filterName;
 
     @CommandLine.Option(names = {
-            "--kamelets-version" }, description = "Apache Camel Kamelets 
version")
-    String kameletsVersion;
+            "--kamelets-version" }, description = "Apache Camel Kamelets 
version",
+                        defaultValue = RuntimeType.KAMELETS_VERSION)
+    String kameletsVersion = RuntimeType.KAMELETS_VERSION;
 
     public CatalogKamelet(CamelJBangMain main) {
         super(main);
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
index 511d7311e3aa..8bf84d7bfb87 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
@@ -217,18 +217,28 @@ class ExportTest {
 
         if (rt == RuntimeType.main) {
             Assertions.assertTrue(containsDependency(model.getDependencies(), 
"org.apache.camel", "camel-kamelet", null));
+            Assertions.assertTrue(containsDependency(model.getDependencies(), 
"org.apache.camel", "camel-http", null));
+            Assertions.assertTrue(containsDependency(model.getDependencies(), 
"org.apache.camel", "camel-sql", null));
             Assertions
                     .assertFalse(
                             containsDependency(model.getDependencies(), 
"org.apache.camel.kamelets", "camel-kamelets", null));
         } else if (rt == RuntimeType.springBoot) {
             Assertions.assertTrue(
                     containsDependency(model.getDependencies(), 
"org.apache.camel.springboot", "camel-kamelet-starter", null));
+            Assertions.assertTrue(
+                    containsDependency(model.getDependencies(), 
"org.apache.camel.springboot", "camel-http-starter", null));
+            Assertions.assertTrue(
+                    containsDependency(model.getDependencies(), 
"org.apache.camel.springboot", "camel-sql-starter", null));
             Assertions
                     .assertFalse(
                             containsDependency(model.getDependencies(), 
"org.apache.camel.kamelets", "camel-kamelets", null));
         } else if (rt == RuntimeType.quarkus) {
             Assertions.assertTrue(
                     containsDependency(model.getDependencies(), 
"org.apache.camel.quarkus", "camel-quarkus-kamelet", null));
+            Assertions.assertTrue(
+                    containsDependency(model.getDependencies(), 
"org.apache.camel.quarkus", "camel-quarkus-http", null));
+            Assertions.assertTrue(
+                    containsDependency(model.getDependencies(), 
"org.apache.camel.quarkus", "camel-quarkus-sql", null));
             Assertions
                     .assertFalse(
                             containsDependency(model.getDependencies(), 
"org.apache.camel.kamelets", "camel-kamelets", null));
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/test/resources/use-source-route.yaml 
b/dsl/camel-jbang/camel-jbang-core/src/test/resources/use-source-route.yaml
new file mode 100644
index 000000000000..0d4e2e0f84c1
--- /dev/null
+++ b/dsl/camel-jbang/camel-jbang-core/src/test/resources/use-source-route.yaml
@@ -0,0 +1,23 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+- from:
+    uri: kamelet:user-source
+    steps:
+      - setBody:
+          constant: Hello Camel !!!
+      - to: log:info
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/test/resources/user-source.kamelet.yaml 
b/dsl/camel-jbang/camel-jbang-core/src/test/resources/user-source.kamelet.yaml
index 7cbbb6df9bb7..de8aa1f5aea2 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/test/resources/user-source.kamelet.yaml
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/test/resources/user-source.kamelet.yaml
@@ -45,6 +45,7 @@ spec:
     - "camel:timer"
     - "camel:http"
     - "camel:kamelet"
+    - "camel:sql"
   template:
     from:
       uri: "timer:user"
diff --git a/dsl/camel-kamelet-main/pom.xml b/dsl/camel-kamelet-main/pom.xml
index 711c0bb54cee..b719f91edbbb 100644
--- a/dsl/camel-kamelet-main/pom.xml
+++ b/dsl/camel-kamelet-main/pom.xml
@@ -216,6 +216,18 @@
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>templating-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>filter-src</id>
+                        <goals>
+                            <goal>filter-sources</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
     </build>
 
diff --git a/dsl/camel-kamelet-main/src/main/docs/kamelet-main.adoc 
b/dsl/camel-kamelet-main/src/main/docs/kamelet-main.adoc
index 3cac474929d4..67dda062e625 100644
--- a/dsl/camel-kamelet-main/src/main/docs/kamelet-main.adoc
+++ b/dsl/camel-kamelet-main/src/main/docs/kamelet-main.adoc
@@ -20,7 +20,7 @@ The `KameletMain` is pre-configured with the following 
properties:
 
 [source,properties]
 ----
-camel.component.kamelet.location = 
classpath:kamelets,github:apache:camel-kamelets/kamelets
+camel.component.kamelet.location = classpath:kamelets
 camel.component.rest.consumerComponentName = platform-http
 camel.component.rest.producerComponentName = vertx-http
 camel.main.jmxUpdateRouteEnabled = true
@@ -28,25 +28,5 @@ camel.main.jmxUpdateRouteEnabled = true
 
 These settings can be overridden by configuration in `application.properties`.
 
-== Automatic dependencies downloading
-
-The Kamelet Main can automatically download Kamelet YAML files from a remote 
location over http/https, and from github as well.
-
-The official Kamelets from the Apache Camel Kamelet Catalog is stored on 
github and they can be used out of the box as-is.
-
-For example a Camel route can be _coded_ in YAML which uses the Earthquake 
Kamelet from the catalog, as shown below:
-
-[source,yaml]
-----
-- route:
-    from: "kamelet:earthquake-source"
-    steps:
-      - unmarshal:
-          json: {}
-      - log: "Earthquake with magnitude ${body[properties][mag]} at 
${body[properties][place]}"
-----
-
-In this use-case the earthquake kamelet will be downloaded from github, and as 
well its required dependencies.
-
 You can find an example with this at
 https://github.com/apache/camel-examples/tree/main/kamelet-main[kamelet-main].
diff --git 
a/dsl/camel-kamelet-main/src/main/java-templates/org/apache/camel/main/util/KameletCatalogHelper.java
 
b/dsl/camel-kamelet-main/src/main/java-templates/org/apache/camel/main/util/KameletCatalogHelper.java
new file mode 100644
index 000000000000..291de6467410
--- /dev/null
+++ 
b/dsl/camel-kamelet-main/src/main/java-templates/org/apache/camel/main/util/KameletCatalogHelper.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.main.util;
+
+public class KameletCatalogHelper {
+
+    public static final String KAMELETS_VERSION = 
"${camel-kamelets-catalog-version}";
+
+}
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 32de5172de4b..af15d05e9c44 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
@@ -118,7 +118,7 @@ import org.apache.camel.tooling.maven.MavenGav;
  */
 public class KameletMain extends MainCommandLineSupport {
 
-    public static final String DEFAULT_KAMELETS_LOCATION = 
"classpath:kamelets,github:apache:camel-kamelets/kamelets";
+    public static final String DEFAULT_KAMELETS_LOCATION = 
"classpath:kamelets";
 
     private final String instanceType;
     protected final MainRegistry registry = new MainRegistry();
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 3955166ed44f..b7ef150526d4 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
@@ -129,6 +129,16 @@ public final class DependencyDownloaderKamelet extends 
ServiceSupport
             this.kameletsVersion = kameletsVersion;
         }
 
+        @Override
+        protected void doInit() throws Exception {
+            super.doInit();
+
+            MavenDependencyDownloader downloader = 
getCamelContext().hasService(MavenDependencyDownloader.class);
+            if (!downloader.alreadyOnClasspath("org.apache.camel.kamelets", 
"camel-kamelets", kameletsVersion)) {
+                downloader.downloadDependency("org.apache.camel.kamelets", 
"camel-kamelets", kameletsVersion, false);
+            }
+        }
+
         @Override
         protected RouteBuilder builder(YamlDeserializationContext ctx, Node 
node) {
             Node name = nodeAt(node, "/metadata/name");
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 549784b55c96..f2dc291ada70 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
@@ -37,6 +37,20 @@ public class KnownKameletRoutesBuilderLoader extends 
KameletRoutesBuilderLoader
         this.kameletsVersion = kameletsVersion;
     }
 
+    @Override
+    protected void doInit() throws Exception {
+        super.doInit();
+
+        // download kamelet catalog for the correct version
+        if (kameletsVersion == null || kameletsVersion.isBlank()) {
+            kameletsVersion = VersionHelper.extractKameletsVersion();
+        }
+        MavenDependencyDownloader downloader = 
getCamelContext().hasService(MavenDependencyDownloader.class);
+        if (!downloader.alreadyOnClasspath("org.apache.camel.kamelets", 
"camel-kamelets", kameletsVersion)) {
+            downloader.downloadDependency("org.apache.camel.kamelets", 
"camel-kamelets", kameletsVersion, false);
+        }
+    }
+
     @Override
     public RouteBuilder doLoadRouteBuilder(Resource resource) throws Exception 
{
         if (!resource.exists()) {
@@ -54,13 +68,7 @@ public class KnownKameletRoutesBuilderLoader extends 
KameletRoutesBuilderLoader
     }
 
     private List<String> findKameletNames() {
-        // download kamelet catalog for the correct version
-        if (kameletsVersion == null || kameletsVersion.isBlank()) {
-            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);
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 6dc137d2d99f..86245b9d95fd 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
@@ -28,7 +28,6 @@ public final class VersionHelper {
 
     private static String camelVersion;
 
-    private static final String KAMELETS_DEFAULT_VERSION = "4.14.1";
     private static final Pattern KAMELETS_LIBRARY = 
Pattern.compile("camel-kamelets-(\\d[\\w\\d.-]*).jar", Pattern.DOTALL);
     private static final Pattern CAMEL_BASE_ENGINE_LIBRARY
             = Pattern.compile("camel-base-engine-(\\d[\\w\\d.-]*).jar", 
Pattern.DOTALL);
@@ -125,7 +124,7 @@ public final class VersionHelper {
             }
         }
 
-        return KAMELETS_DEFAULT_VERSION;
+        return KameletCatalogHelper.KAMELETS_VERSION;
     }
 
     public static String extractCamelVersion() {

Reply via email to