You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/06/15 09:00:47 UTC

[camel] 02/03: CAMEL-18194: camel-jbang - Refactor to make download code as single service.

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

commit 8b8e7b459691269bbc8a35b744424a2911cfb45e
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Jun 15 09:52:49 2022 +0200

    CAMEL-18194: camel-jbang - Refactor to make download code as single service.
---
 .../camel/dsl/jbang/core/commands/BaseExport.java  |  2 +-
 .../dsl/jbang/core/commands/ExportCamelMain.java   |  2 +-
 .../dsl/jbang/core/commands/ExportQuarkus.java     |  2 +-
 .../dsl/jbang/core/commands/ExportSpringBoot.java  |  2 +-
 .../apache/camel/dsl/jbang/core/commands/Run.java  |  2 +-
 .../java/org/apache/camel/main/KameletMain.java    | 39 ++++++----
 .../download/CommandLineDependencyDownloader.java  | 28 +++-----
 .../camel/main/download/DependencyDownloader.java  | 17 +++++
 .../DependencyDownloaderClassResolver.java         | 13 ++--
 .../DependencyDownloaderComponentResolver.java     | 29 +++-----
 .../DependencyDownloaderDataFormatResolver.java    | 27 ++-----
 .../main/download/DependencyDownloaderKamelet.java | 31 +++-----
 .../DependencyDownloaderLanguageResolver.java      | 25 ++-----
 ...ependencyDownloaderPropertyBindingListener.java | 13 ++--
 .../DependencyDownloaderResourceLoader.java        | 15 ++--
 .../download/DependencyDownloaderRoutesLoader.java | 14 ++--
 .../download/DependencyDownloaderStrategy.java     | 12 ++--
 .../camel/main/download/DownloadThreadPool.java    | 30 +++++++-
 ...rHelper.java => MavenDependencyDownloader.java} | 83 +++++++++++++++++-----
 ...dencyUtil.java => MavenDependencyResolver.java} | 17 ++---
 ...lTest.java => MavenDependencyResolverTest.java} |  6 +-
 21 files changed, 215 insertions(+), 194 deletions(-)

diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/BaseExport.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/BaseExport.java
index 7a8f6bae46b..36e8753c251 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/BaseExport.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/BaseExport.java
@@ -36,7 +36,7 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import org.apache.camel.dsl.jbang.core.common.RuntimeUtil;
-import org.apache.camel.main.MavenGav;
+import org.apache.camel.main.download.MavenGav;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.OrderedProperties;
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java
index f1ee6bb11ab..781d7496b0c 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java
@@ -24,7 +24,7 @@ import java.util.Set;
 
 import org.apache.camel.catalog.CamelCatalog;
 import org.apache.camel.catalog.DefaultCamelCatalog;
-import org.apache.camel.main.MavenGav;
+import org.apache.camel.main.download.MavenGav;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.OrderedProperties;
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
index 99aeb442064..77a0655792d 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
@@ -22,7 +22,7 @@ import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.util.Set;
 
-import org.apache.camel.main.MavenGav;
+import org.apache.camel.main.download.MavenGav;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.OrderedProperties;
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
index a07371c3e74..5009ef15e7e 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
@@ -25,7 +25,7 @@ import java.util.Set;
 
 import org.apache.camel.catalog.CamelCatalog;
 import org.apache.camel.catalog.DefaultCamelCatalog;
-import org.apache.camel.main.MavenGav;
+import org.apache.camel.main.download.MavenGav;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.OrderedProperties;
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 317eabc84c6..7357e8ef598 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
@@ -51,8 +51,8 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.dsl.jbang.core.common.RuntimeUtil;
 import org.apache.camel.generator.openapi.RestDslGenerator;
 import org.apache.camel.impl.lw.LightweightCamelContext;
-import org.apache.camel.main.DownloadListener;
 import org.apache.camel.main.KameletMain;
+import org.apache.camel.main.download.DownloadListener;
 import org.apache.camel.support.ResourceHelper;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.IOHelper;
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 88fd419a717..b46193c93d2 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
@@ -39,6 +39,7 @@ import org.apache.camel.main.download.DependencyDownloaderRoutesLoader;
 import org.apache.camel.main.download.DependencyDownloaderStrategy;
 import org.apache.camel.main.download.DownloadListener;
 import org.apache.camel.main.download.KnownDependenciesResolver;
+import org.apache.camel.main.download.MavenDependencyDownloader;
 import org.apache.camel.main.http.VertxHttpServer;
 import org.apache.camel.main.injection.AnnotationDependencyInjection;
 import org.apache.camel.main.util.ExtraFilesClassLoader;
@@ -263,17 +264,25 @@ public class KameletMain extends MainCommandLineSupport {
         answer.setLogJvmUptime(true);
         if (download) {
             answer.setApplicationContextClassLoader(createApplicationContextClassLoader());
+
+            MavenDependencyDownloader downloader = new MavenDependencyDownloader();
+            downloader.setCamelContext(answer);
+            downloader.setRepos(repos);
+            downloader.setFresh(fresh);
+            downloader.setDownloadListener(downloadListener);
+
+            // register as extension
+            try {
+                answer.adapt(ExtendedCamelContext.class).addService(downloader);
+            } catch (Exception e) {
+                throw RuntimeCamelException.wrapRuntimeException(e);
+            }
         }
         if (stub) {
             // turn off auto-wiring when running in stub mode
             mainConfigurationProperties.setAutowiredEnabled(false);
         }
 
-        // register download listener
-        if (downloadListener != null) {
-            answer.adapt(ExtendedCamelContext.class).setExtension(DownloadListener.class, downloadListener);
-        }
-
         String info = startupInfo();
         if (info != null) {
             LOG.info(info);
@@ -328,22 +337,22 @@ public class KameletMain extends MainCommandLineSupport {
             // dependencies from CLI
             Object dependencies = getInitialProperties().get("camel.jbang.dependencies");
             if (dependencies != null) {
-                answer.addService(new CommandLineDependencyDownloader(dependencies.toString(), repos, fresh));
+                answer.addService(new CommandLineDependencyDownloader(answer, dependencies.toString()));
             }
 
             KnownDependenciesResolver known = new KnownDependenciesResolver(answer);
             known.loadKnownDependencies();
             DependencyDownloaderPropertyBindingListener listener
-                    = new DependencyDownloaderPropertyBindingListener(answer, known, repos, fresh);
+                    = new DependencyDownloaderPropertyBindingListener(answer, known);
             answer.getRegistry().bind(DependencyDownloaderPropertyBindingListener.class.getName(), listener);
             answer.getRegistry().bind(DependencyDownloaderStrategy.class.getName(),
-                    new DependencyDownloaderStrategy(answer, repos, fresh));
-            answer.setClassResolver(new DependencyDownloaderClassResolver(answer, known, repos, fresh));
-            answer.setComponentResolver(new DependencyDownloaderComponentResolver(answer, repos, fresh, stub));
-            answer.setDataFormatResolver(new DependencyDownloaderDataFormatResolver(answer, repos, fresh));
-            answer.setLanguageResolver(new DependencyDownloaderLanguageResolver(answer, repos, fresh));
-            answer.setResourceLoader(new DependencyDownloaderResourceLoader(answer, repos, fresh));
-            answer.addService(new DependencyDownloaderKamelet(answer, repos, fresh));
+                    new DependencyDownloaderStrategy(answer));
+            answer.setClassResolver(new DependencyDownloaderClassResolver(answer, known));
+            answer.setComponentResolver(new DependencyDownloaderComponentResolver(answer, stub));
+            answer.setDataFormatResolver(new DependencyDownloaderDataFormatResolver(answer));
+            answer.setLanguageResolver(new DependencyDownloaderLanguageResolver(answer));
+            answer.setResourceLoader(new DependencyDownloaderResourceLoader(answer));
+            answer.addService(new DependencyDownloaderKamelet(answer));
         } catch (Exception e) {
             throw RuntimeCamelException.wrapRuntimeException(e);
         }
@@ -379,7 +388,7 @@ public class KameletMain extends MainCommandLineSupport {
         if (download) {
             // use resolvers that can auto downloaded
             camelContext.adapt(ExtendedCamelContext.class)
-                    .setRoutesLoader(new DependencyDownloaderRoutesLoader(configure(), repos, fresh));
+                    .setRoutesLoader(new DependencyDownloaderRoutesLoader(camelContext, configure()));
         } else {
             super.configureRoutesLoader(camelContext);
         }
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/CommandLineDependencyDownloader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/CommandLineDependencyDownloader.java
index e6d256d7244..b2209da6eec 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/CommandLineDependencyDownloader.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/CommandLineDependencyDownloader.java
@@ -20,30 +20,18 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.CamelContextAware;
 import org.apache.camel.support.service.ServiceSupport;
 
-public class CommandLineDependencyDownloader extends ServiceSupport implements CamelContextAware {
+public class CommandLineDependencyDownloader extends ServiceSupport {
 
-    private CamelContext camelContext;
+    private final CamelContext camelContext;
+    private final DependencyDownloader downloader;
     private final String dependencies;
-    private final String repos;
-    private final boolean fresh;
 
-    public CommandLineDependencyDownloader(String dependencies, String repos, boolean fresh) {
-        this.dependencies = dependencies;
-        this.repos = repos;
-        this.fresh = fresh;
-    }
-
-    @Override
-    public CamelContext getCamelContext() {
-        return camelContext;
-    }
-
-    @Override
-    public void setCamelContext(CamelContext camelContext) {
+    public CommandLineDependencyDownloader(CamelContext camelContext, String dependencies) {
         this.camelContext = camelContext;
+        this.dependencies = dependencies;
+        this.downloader = camelContext.hasService(DependencyDownloader.class);
     }
 
     @Override
@@ -67,7 +55,7 @@ public class CommandLineDependencyDownloader extends ServiceSupport implements C
         if (!gavs.isEmpty()) {
             for (String gav : gavs) {
                 MavenGav mg = MavenGav.parseGav(camelContext, gav);
-                DownloaderHelper.downloadDependency(camelContext, repos, fresh, mg.getGroupId(), mg.getArtifactId(),
+                downloader.downloadDependency(mg.getGroupId(), mg.getArtifactId(),
                         mg.getVersion());
             }
         }
@@ -76,7 +64,7 @@ public class CommandLineDependencyDownloader extends ServiceSupport implements C
     private boolean isValidGav(String gav) {
         MavenGav mg = MavenGav.parseGav(camelContext, gav);
         boolean exists
-                = DownloaderHelper.alreadyOnClasspath(camelContext, mg.getGroupId(), mg.getArtifactId(), mg.getVersion());
+                = downloader.alreadyOnClasspath(mg.getGroupId(), mg.getArtifactId(), mg.getVersion());
         // valid if not already on classpath
         return !exists;
     }
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloader.java
index e5ea11fc3a2..5823a85dbf0 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloader.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloader.java
@@ -24,6 +24,13 @@ import org.apache.camel.StaticService;
  */
 public interface DependencyDownloader extends CamelContextAware, StaticService {
 
+    DownloadListener getDownloadListener();
+
+    /**
+     * Sets a listener to capture download activity
+     */
+    void setDownloadListener(DownloadListener downloadListener);
+
     String getRepos();
 
     /**
@@ -47,4 +54,14 @@ public interface DependencyDownloader extends CamelContextAware, StaticService {
      */
     void downloadDependency(String groupId, String artifactId, String version);
 
+    /**
+     * Checks whether the dependency is already on the classpath
+     *
+     * @param  groupId    maven group id
+     * @param  artifactId maven artifact id
+     * @param  version    maven version
+     * @return            true if already on classpath, false if not.
+     */
+    boolean alreadyOnClasspath(String groupId, String artifactId, String version);
+
 }
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderClassResolver.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderClassResolver.java
index 5d675ebd973..fb5a9473802 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderClassResolver.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderClassResolver.java
@@ -23,16 +23,13 @@ import org.apache.camel.util.ObjectHelper;
 public final class DependencyDownloaderClassResolver extends DefaultClassResolver {
 
     private final KnownDependenciesResolver knownDependenciesResolver;
-    private final String repos;
-    private final boolean fresh;
+    private final DependencyDownloader downloader;
 
     public DependencyDownloaderClassResolver(CamelContext camelContext,
-                                             KnownDependenciesResolver knownDependenciesResolver,
-                                             String repos, boolean fresh) {
+                                             KnownDependenciesResolver knownDependenciesResolver) {
         super(camelContext);
+        this.downloader = camelContext.hasService(DependencyDownloader.class);
         this.knownDependenciesResolver = knownDependenciesResolver;
-        this.repos = repos;
-        this.fresh = fresh;
     }
 
     @Override
@@ -48,9 +45,9 @@ public final class DependencyDownloaderClassResolver extends DefaultClassResolve
             // okay maybe the class is from a known GAV that we can download first and then load the class
             MavenGav gav = knownDependenciesResolver.mavenGavForClass(name);
             if (gav != null) {
-                if (!DownloaderHelper.alreadyOnClasspath(getCamelContext(), gav.getGroupId(), gav.getArtifactId(),
+                if (!downloader.alreadyOnClasspath(gav.getGroupId(), gav.getArtifactId(),
                         gav.getVersion())) {
-                    DownloaderHelper.downloadDependency(getCamelContext(), repos, fresh, gav.getGroupId(), gav.getArtifactId(),
+                    downloader.downloadDependency(gav.getGroupId(), gav.getArtifactId(),
                             gav.getVersion());
                 }
                 try {
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderComponentResolver.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderComponentResolver.java
index 4c490cb972e..b28b1791d61 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderComponentResolver.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderComponentResolver.java
@@ -17,7 +17,6 @@
 package org.apache.camel.main.download;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.CamelContextAware;
 import org.apache.camel.Component;
 import org.apache.camel.catalog.CamelCatalog;
 import org.apache.camel.catalog.DefaultCamelCatalog;
@@ -29,39 +28,27 @@ import org.apache.camel.tooling.model.ComponentModel;
 /**
  * Auto downloaded needed JARs when resolving components.
  */
-public final class DependencyDownloaderComponentResolver extends DefaultComponentResolver implements CamelContextAware {
+public final class DependencyDownloaderComponentResolver extends DefaultComponentResolver {
 
     private static final String ACCEPTED_STUB_NAMES = "stub,bean,class,kamelet,rest,rest-api,platform-http,vertx-http";
 
     private final CamelCatalog catalog = new DefaultCamelCatalog();
-    private CamelContext camelContext;
-    private final String repos;
-    private final boolean fresh;
-    private boolean stub;
+    private final CamelContext camelContext;
+    private final DependencyDownloader downloader;
+    private final boolean stub;
 
-    public DependencyDownloaderComponentResolver(CamelContext camelContext, String repos, boolean fresh, boolean stub) {
+    public DependencyDownloaderComponentResolver(CamelContext camelContext, boolean stub) {
         this.camelContext = camelContext;
-        this.repos = repos;
-        this.fresh = fresh;
+        this.downloader = camelContext.hasService(DependencyDownloader.class);
         this.stub = stub;
     }
 
-    @Override
-    public CamelContext getCamelContext() {
-        return camelContext;
-    }
-
-    @Override
-    public void setCamelContext(CamelContext camelContext) {
-        this.camelContext = camelContext;
-    }
-
     @Override
     public Component resolveComponent(String name, CamelContext context) {
         ComponentModel model = catalog.componentModel(name);
-        if (model != null && !DownloaderHelper.alreadyOnClasspath(camelContext, model.getGroupId(), model.getArtifactId(),
+        if (model != null && !downloader.alreadyOnClasspath(model.getGroupId(), model.getArtifactId(),
                 model.getVersion())) {
-            DownloaderHelper.downloadDependency(camelContext, repos, fresh, model.getGroupId(), model.getArtifactId(),
+            downloader.downloadDependency(model.getGroupId(), model.getArtifactId(),
                     model.getVersion());
         }
 
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderDataFormatResolver.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderDataFormatResolver.java
index 6443f36a9aa..0a84d34fb85 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderDataFormatResolver.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderDataFormatResolver.java
@@ -17,7 +17,6 @@
 package org.apache.camel.main.download;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.CamelContextAware;
 import org.apache.camel.catalog.CamelCatalog;
 import org.apache.camel.catalog.DefaultCamelCatalog;
 import org.apache.camel.impl.engine.DefaultDataFormatResolver;
@@ -27,35 +26,23 @@ import org.apache.camel.tooling.model.DataFormatModel;
 /**
  * Auto downloaded needed JARs when resolving data formats.
  */
-public final class DependencyDownloaderDataFormatResolver extends DefaultDataFormatResolver implements CamelContextAware {
+public final class DependencyDownloaderDataFormatResolver extends DefaultDataFormatResolver {
 
     private final CamelCatalog catalog = new DefaultCamelCatalog();
-    private CamelContext camelContext;
-    private final String repos;
-    private final boolean fresh;
+    private final CamelContext camelContext;
+    private final DependencyDownloader downloader;
 
-    public DependencyDownloaderDataFormatResolver(CamelContext camelContext, String repos, boolean fresh) {
-        this.camelContext = camelContext;
-        this.repos = repos;
-        this.fresh = fresh;
-    }
-
-    @Override
-    public CamelContext getCamelContext() {
-        return camelContext;
-    }
-
-    @Override
-    public void setCamelContext(CamelContext camelContext) {
+    public DependencyDownloaderDataFormatResolver(CamelContext camelContext) {
         this.camelContext = camelContext;
+        this.downloader = camelContext.hasService(DependencyDownloader.class);
     }
 
     @Override
     public DataFormat createDataFormat(String name, CamelContext context) {
         DataFormatModel model = catalog.dataFormatModel(name);
-        if (model != null && !DownloaderHelper.alreadyOnClasspath(camelContext, model.getGroupId(), model.getArtifactId(),
+        if (model != null && !downloader.alreadyOnClasspath(model.getGroupId(), model.getArtifactId(),
                 model.getVersion())) {
-            DownloaderHelper.downloadDependency(camelContext, repos, fresh, model.getGroupId(), model.getArtifactId(),
+            downloader.downloadDependency(model.getGroupId(), model.getArtifactId(),
                     model.getVersion());
         }
         return super.createDataFormat(name, context);
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 7513a69f3d7..b97ef3b1a67 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
@@ -50,9 +50,9 @@ public final class DependencyDownloaderKamelet extends ServiceSupport
     private final KameletDependencyDownloader downloader;
     private CamelContext camelContext;
 
-    public DependencyDownloaderKamelet(CamelContext camelContext, String repos, boolean fresh) {
+    public DependencyDownloaderKamelet(CamelContext camelContext) {
         this.camelContext = camelContext;
-        this.downloader = new KameletDependencyDownloader("yaml", repos, fresh);
+        this.downloader = new KameletDependencyDownloader(camelContext, "yaml");
     }
 
     @Override
@@ -103,28 +103,17 @@ public final class DependencyDownloaderKamelet extends ServiceSupport
     /**
      * To automatic downloaded dependencies that Kamelets requires.
      */
-    private static class KameletDependencyDownloader extends YamlRoutesBuilderLoaderSupport implements CamelContextAware {
+    private static class KameletDependencyDownloader extends YamlRoutesBuilderLoaderSupport {
 
         private static final Logger LOG = LoggerFactory.getLogger(KameletDependencyDownloader.class);
-        private CamelContext camelContext;
+        private final CamelContext camelContext;
+        private final DependencyDownloader downloader;
         private final Set<String> downloaded = new HashSet<>();
-        private final String repos;
-        private final boolean fresh;
 
-        public KameletDependencyDownloader(String extension, String repos, boolean fresh) {
+        public KameletDependencyDownloader(CamelContext camelContext, String extension) {
             super(extension);
-            this.repos = repos;
-            this.fresh = fresh;
-        }
-
-        @Override
-        public CamelContext getCamelContext() {
-            return camelContext;
-        }
-
-        @Override
-        public void setCamelContext(CamelContext camelContext) {
             this.camelContext = camelContext;
+            this.downloader = camelContext.hasService(DependencyDownloader.class);
         }
 
         @Override
@@ -173,8 +162,7 @@ public final class DependencyDownloaderKamelet extends ServiceSupport
             if (!gavs.isEmpty()) {
                 for (String gav : gavs) {
                     MavenGav mg = MavenGav.parseGav(camelContext, gav);
-                    DownloaderHelper.downloadDependency(camelContext, repos, fresh, mg.getGroupId(), mg.getArtifactId(),
-                            mg.getVersion());
+                    downloader.downloadDependency(mg.getGroupId(), mg.getArtifactId(), mg.getVersion());
                     downloaded.add(gav);
                 }
             }
@@ -192,8 +180,7 @@ public final class DependencyDownloaderKamelet extends ServiceSupport
             }
 
             MavenGav mg = MavenGav.parseGav(camelContext, gav);
-            boolean exists
-                    = DownloaderHelper.alreadyOnClasspath(camelContext, mg.getGroupId(), mg.getArtifactId(), mg.getVersion());
+            boolean exists = downloader.alreadyOnClasspath(mg.getGroupId(), mg.getArtifactId(), mg.getVersion());
             // valid if not already on classpath
             return !exists;
         }
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderLanguageResolver.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderLanguageResolver.java
index 4dc43519a65..ba39831912f 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderLanguageResolver.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderLanguageResolver.java
@@ -17,7 +17,6 @@
 package org.apache.camel.main.download;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.CamelContextAware;
 import org.apache.camel.catalog.CamelCatalog;
 import org.apache.camel.catalog.DefaultCamelCatalog;
 import org.apache.camel.impl.engine.DefaultLanguageResolver;
@@ -27,35 +26,23 @@ import org.apache.camel.tooling.model.LanguageModel;
 /**
  * Auto downloaded needed JARs when resolving languages.
  */
-public final class DependencyDownloaderLanguageResolver extends DefaultLanguageResolver implements CamelContextAware {
+public final class DependencyDownloaderLanguageResolver extends DefaultLanguageResolver {
 
     private final CamelCatalog catalog = new DefaultCamelCatalog();
     private CamelContext camelContext;
-    private final String repos;
-    private final boolean fresh;
+    private final DependencyDownloader downloader;
 
-    public DependencyDownloaderLanguageResolver(CamelContext camelContext, String repos, boolean fresh) {
-        this.camelContext = camelContext;
-        this.repos = repos;
-        this.fresh = fresh;
-    }
-
-    @Override
-    public CamelContext getCamelContext() {
-        return camelContext;
-    }
-
-    @Override
-    public void setCamelContext(CamelContext camelContext) {
+    public DependencyDownloaderLanguageResolver(CamelContext camelContext) {
         this.camelContext = camelContext;
+        this.downloader = camelContext.hasService(DependencyDownloader.class);
     }
 
     @Override
     public Language resolveLanguage(String name, CamelContext context) {
         LanguageModel model = catalog.languageModel(name);
-        if (model != null && !DownloaderHelper.alreadyOnClasspath(camelContext, model.getGroupId(), model.getArtifactId(),
+        if (model != null && !downloader.alreadyOnClasspath(model.getGroupId(), model.getArtifactId(),
                 model.getVersion())) {
-            DownloaderHelper.downloadDependency(camelContext, repos, fresh, model.getGroupId(), model.getArtifactId(),
+            downloader.downloadDependency(model.getGroupId(), model.getArtifactId(),
                     model.getVersion());
         }
 
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderPropertyBindingListener.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderPropertyBindingListener.java
index cb5ad91e6fb..86949910f17 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderPropertyBindingListener.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderPropertyBindingListener.java
@@ -23,16 +23,13 @@ public class DependencyDownloaderPropertyBindingListener implements PropertyBind
 
     private final CamelContext camelContext;
     private final KnownDependenciesResolver knownDependenciesResolver;
-    private final String repos;
-    private final boolean fresh;
+    private final DependencyDownloader downloader;
 
     public DependencyDownloaderPropertyBindingListener(CamelContext camelContext,
-                                                       KnownDependenciesResolver knownDependenciesResolver,
-                                                       String repos, boolean fresh) {
+                                                       KnownDependenciesResolver knownDependenciesResolver) {
         this.camelContext = camelContext;
         this.knownDependenciesResolver = knownDependenciesResolver;
-        this.repos = repos;
-        this.fresh = fresh;
+        this.downloader = camelContext.hasService(DependencyDownloader.class);
     }
 
     @Override
@@ -41,9 +38,9 @@ public class DependencyDownloaderPropertyBindingListener implements PropertyBind
             String s = (String) value;
             MavenGav gav = knownDependenciesResolver.mavenGavForClass(s);
             if (gav != null) {
-                if (!DownloaderHelper.alreadyOnClasspath(camelContext, gav.getGroupId(), gav.getArtifactId(),
+                if (!downloader.alreadyOnClasspath(gav.getGroupId(), gav.getArtifactId(),
                         gav.getVersion())) {
-                    DownloaderHelper.downloadDependency(camelContext, repos, fresh, gav.getGroupId(), gav.getArtifactId(),
+                    downloader.downloadDependency(gav.getGroupId(), gav.getArtifactId(),
                             gav.getVersion());
                 }
             }
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderResourceLoader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderResourceLoader.java
index 53660c7a75a..ca9a133c0be 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderResourceLoader.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderResourceLoader.java
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.main.download;
 
 import org.apache.camel.CamelContext;
@@ -24,13 +23,11 @@ import org.apache.camel.util.StringHelper;
 
 public class DependencyDownloaderResourceLoader extends DefaultResourceLoader {
 
-    private final String repos;
-    private final boolean fresh;
+    private final DependencyDownloader downloader;
 
-    public DependencyDownloaderResourceLoader(CamelContext camelContext, String repos, boolean fresh) {
+    public DependencyDownloaderResourceLoader(CamelContext camelContext) {
         super(camelContext);
-        this.repos = repos;
-        this.fresh = fresh;
+        this.downloader = camelContext.hasService(DependencyDownloader.class);
     }
 
     @Override
@@ -39,10 +36,10 @@ public class DependencyDownloaderResourceLoader extends DefaultResourceLoader {
         if ("github".equals(scheme) || "gist".equals(scheme)) {
             if (!hasResourceResolver(scheme)) {
                 // need to download github resolver
-                if (!DownloaderHelper.alreadyOnClasspath(
-                        getCamelContext(), "org.apache.camel", "camel-resourceresolver-github",
+                if (!downloader.alreadyOnClasspath(
+                        "org.apache.camel", "camel-resourceresolver-github",
                         getCamelContext().getVersion())) {
-                    DownloaderHelper.downloadDependency(getCamelContext(), repos, fresh, "org.apache.camel",
+                    downloader.downloadDependency("org.apache.camel",
                             "camel-resourceresolver-github",
                             getCamelContext().getVersion());
                 }
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 832b1d75028..062688df12c 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
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.main.download;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.main.MainConfigurationProperties;
@@ -30,13 +31,12 @@ import org.apache.camel.support.service.ServiceHelper;
  */
 public class DependencyDownloaderRoutesLoader extends MainRoutesLoader {
 
-    private final String repos;
-    private final boolean fresh;
+    private final DependencyDownloader downloader;
 
-    public DependencyDownloaderRoutesLoader(MainConfigurationProperties configuration, String repos, boolean fresh) {
+    public DependencyDownloaderRoutesLoader(CamelContext camelContext, MainConfigurationProperties configuration) {
         super(configuration);
-        this.repos = repos;
-        this.fresh = fresh;
+        setCamelContext(camelContext);
+        this.downloader = camelContext.hasService(DependencyDownloader.class);
     }
 
     @Override
@@ -84,9 +84,9 @@ public class DependencyDownloaderRoutesLoader extends MainRoutesLoader {
     }
 
     private void downloadLoader(String artifactId) {
-        if (!DownloaderHelper.alreadyOnClasspath(getCamelContext(), "org.apache.camel", artifactId,
+        if (!downloader.alreadyOnClasspath("org.apache.camel", artifactId,
                 getCamelContext().getVersion())) {
-            DownloaderHelper.downloadDependency(getCamelContext(), repos, fresh, "org.apache.camel", artifactId,
+            downloader.downloadDependency("org.apache.camel", artifactId,
                     getCamelContext().getVersion());
         }
     }
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderStrategy.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderStrategy.java
index 17e22c9f22e..aec7bf63c67 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderStrategy.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderStrategy.java
@@ -22,20 +22,18 @@ import org.apache.camel.spi.DependencyStrategy;
 public class DependencyDownloaderStrategy implements DependencyStrategy {
 
     private final CamelContext camelContext;
-    private final String repos;
-    private final boolean fresh;
+    private final DependencyDownloader downloader;
 
-    public DependencyDownloaderStrategy(CamelContext camelContext, String repos, boolean fresh) {
+    public DependencyDownloaderStrategy(CamelContext camelContext) {
         this.camelContext = camelContext;
-        this.repos = repos;
-        this.fresh = fresh;
+        this.downloader = camelContext.hasService(DependencyDownloader.class);
     }
 
     @Override
     public void onDependency(String dependency) {
         MavenGav gav = MavenGav.parseGav(camelContext, dependency);
-        if (!DownloaderHelper.alreadyOnClasspath(camelContext, gav.getGroupId(), gav.getArtifactId(), gav.getVersion())) {
-            DownloaderHelper.downloadDependency(camelContext, repos, fresh, gav.getGroupId(), gav.getArtifactId(),
+        if (!downloader.alreadyOnClasspath(gav.getGroupId(), gav.getArtifactId(), gav.getVersion())) {
+            downloader.downloadDependency(gav.getGroupId(), gav.getArtifactId(),
                     gav.getVersion());
         }
     }
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadThreadPool.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadThreadPool.java
index fd763179a39..99fc6f4c165 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadThreadPool.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloadThreadPool.java
@@ -17,11 +17,13 @@
 package org.apache.camel.main.download;
 
 import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
+import org.apache.camel.support.service.ServiceSupport;
 import org.apache.camel.util.StopWatch;
 import org.apache.camel.util.TimeUtils;
 import org.slf4j.Logger;
@@ -29,9 +31,20 @@ import org.slf4j.Logger;
 /**
  * A basic thread pool that run each download task in their own thread, and LOG download activity during download.
  */
-class DownloadThreadPool {
+class DownloadThreadPool extends ServiceSupport implements CamelContextAware {
 
-    private final ExecutorService executorService = Executors.newCachedThreadPool();
+    private CamelContext camelContext;
+    private volatile ExecutorService executorService;
+
+    @Override
+    public CamelContext getCamelContext() {
+        return camelContext;
+    }
+
+    @Override
+    public void setCamelContext(CamelContext camelContext) {
+        this.camelContext = camelContext;
+    }
 
     public void download(Logger log, Runnable task, String gav) {
         Future<?> future = executorService.submit(task);
@@ -68,4 +81,15 @@ class DownloadThreadPool {
         }
     }
 
+    @Override
+    protected void doBuild() throws Exception {
+        executorService = camelContext.getExecutorServiceManager().newCachedThreadPool(this, "MavenDownload");
+    }
+
+    @Override
+    protected void doShutdown() throws Exception {
+        if (executorService != null) {
+            camelContext.getExecutorServiceManager().shutdown(executorService);
+        }
+    }
 }
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloaderHelper.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java
similarity index 66%
rename from dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloaderHelper.java
rename to dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java
index c88c3f673b7..e409e735e2a 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DownloaderHelper.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyDownloader.java
@@ -25,33 +25,70 @@ import java.util.List;
 import java.util.stream.Collectors;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.support.service.ServiceHelper;
+import org.apache.camel.support.service.ServiceSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-/**
- * For downloading dependencies.
- */
-public final class DownloaderHelper {
+public class MavenDependencyDownloader extends ServiceSupport implements DependencyDownloader {
 
     public static final String MAVEN_CENTRAL_REPO = "https://repo1.maven.org/maven2/";
     public static final String APACHE_SNAPSHOT_REPO = "https://repository.apache.org/snapshots";
 
-    private static final Logger LOG = LoggerFactory.getLogger(DownloaderHelper.class);
+    private static final Logger LOG = LoggerFactory.getLogger(MavenDependencyDownloader.class);
     private static final String CP = System.getProperty("java.class.path");
 
-    private static final DownloadThreadPool DOWNLOAD_THREAD_POOL = new DownloadThreadPool();
+    private DownloadThreadPool threadPool;
+    private CamelContext camelContext;
+    private DownloadListener downloadListener;
+    private String repos;
+    private boolean fresh;
 
-    private DownloaderHelper() {
+    @Override
+    public CamelContext getCamelContext() {
+        return camelContext;
     }
 
-    public static void downloadDependency(
-            CamelContext camelContext, String repos, boolean fresh,
-            String groupId, String artifactId, String version) {
+    @Override
+    public void setCamelContext(CamelContext camelContext) {
+        this.camelContext = camelContext;
+    }
 
+    @Override
+    public DownloadListener getDownloadListener() {
+        return downloadListener;
+    }
+
+    @Override
+    public void setDownloadListener(DownloadListener downloadListener) {
+        this.downloadListener = downloadListener;
+    }
+
+    @Override
+    public String getRepos() {
+        return repos;
+    }
+
+    @Override
+    public void setRepos(String repos) {
+        this.repos = repos;
+    }
+
+    @Override
+    public boolean isFresh() {
+        return fresh;
+    }
+
+    @Override
+    public void setFresh(boolean fresh) {
+        this.fresh = fresh;
+    }
+
+    @Override
+    public void downloadDependency(String groupId, String artifactId, String version) {
         // trigger listener
-        DownloadListener listener = camelContext.getExtension(DownloadListener.class);
-        if (listener != null) {
-            listener.onDownloadDependency(groupId, artifactId, version);
+        if (downloadListener != null) {
+            downloadListener.onDownloadDependency(groupId, artifactId, version);
         }
 
         // when running jbang directly then the CP has some existing camel components
@@ -70,7 +107,7 @@ public final class DownloaderHelper {
         }
 
         String gav = groupId + ":" + artifactId + ":" + version;
-        DOWNLOAD_THREAD_POOL.download(LOG, () -> {
+        threadPool.download(LOG, () -> {
             LOG.debug("Downloading: {}", gav);
             List<String> deps = List.of(gav);
             List<String> mavenRepos = new ArrayList<>();
@@ -86,7 +123,8 @@ public final class DownloaderHelper {
                 mavenRepos.add(APACHE_SNAPSHOT_REPO);
             }
 
-            List<MavenArtifact> artifacts = DependencyUtil.resolveDependenciesViaAether(deps, mavenRepos, false, fresh, true);
+            List<MavenArtifact> artifacts
+                    = MavenDependencyResolver.resolveDependenciesViaAether(deps, mavenRepos, false, fresh, true);
             LOG.debug("Resolved {} -> [{}]", gav, artifacts);
 
             DependencyDownloaderClassLoader classLoader
@@ -94,7 +132,7 @@ public final class DownloaderHelper {
             for (MavenArtifact a : artifacts) {
                 File file = a.getFile();
                 // only add to classpath if not already present
-                if (!alreadyOnClasspath(camelContext, a.getGav().getGroupId(), a.getGav().getArtifactId(),
+                if (!alreadyOnClasspath(a.getGav().getGroupId(), a.getGav().getArtifactId(),
                         a.getGav().getVersion())) {
                     classLoader.addFile(file);
                     LOG.trace("Added classpath: {}", a.getGav());
@@ -103,7 +141,7 @@ public final class DownloaderHelper {
         }, gav);
     }
 
-    public static boolean alreadyOnClasspath(CamelContext camelContext, String groupId, String artifactId, String version) {
+    public boolean alreadyOnClasspath(String groupId, String artifactId, String version) {
         // if no artifact then regard this as okay
         if (artifactId == null) {
             return true;
@@ -135,4 +173,15 @@ public final class DownloaderHelper {
         return false;
     }
 
+    @Override
+    protected void doBuild() throws Exception {
+        threadPool = new DownloadThreadPool();
+        threadPool.setCamelContext(camelContext);
+        ServiceHelper.buildService(threadPool);
+    }
+
+    @Override
+    protected void doStop() throws Exception {
+        ServiceHelper.stopAndShutdownService(threadPool);
+    }
 }
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyUtil.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyResolver.java
similarity index 89%
rename from dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyUtil.java
rename to dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyResolver.java
index 227f5ef51ba..f3a371054ab 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyUtil.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/MavenDependencyResolver.java
@@ -34,9 +34,9 @@ import org.jboss.shrinkwrap.resolver.api.maven.MavenStrategyStage;
 import org.jboss.shrinkwrap.resolver.api.maven.MavenWorkingSession;
 import org.jboss.shrinkwrap.resolver.impl.maven.ConfigurableMavenResolverSystemImpl;
 
-public final class DependencyUtil {
+public final class MavenDependencyResolver {
 
-    private DependencyUtil() {
+    private MavenDependencyResolver() {
     }
 
     public static List<MavenArtifact> resolveDependenciesViaAether(
@@ -52,8 +52,8 @@ public final class DependencyUtil {
             for (String repo : customRepos) {
                 // shrikwrap does not have public API for adding release vs snapshot repos
                 // we need workaround using lower-level APIs and reflection
-                boolean snapshot = repo.equals(DownloaderHelper.APACHE_SNAPSHOT_REPO);
-                boolean central = repo.equals(DownloaderHelper.MAVEN_CENTRAL_REPO);
+                boolean snapshot = repo.equals(MavenDependencyDownloader.APACHE_SNAPSHOT_REPO);
+                boolean central = repo.equals(MavenDependencyDownloader.MAVEN_CENTRAL_REPO);
                 String update = fresh ? RepositoryPolicy.UPDATE_POLICY_ALWAYS : RepositoryPolicy.UPDATE_POLICY_NEVER;
                 RepositoryPolicy releasePolicy = new RepositoryPolicy(!snapshot, update, null);
                 RepositoryPolicy snapshotPolicy = new RepositoryPolicy(snapshot, update, null);
@@ -111,12 +111,9 @@ public final class DependencyUtil {
     }
 
     public static Path getLocalMavenRepo() {
-        return Paths.get((String) System.getProperties()
-                .getOrDefault("maven.repo.local",
-                        System.getProperty("user.home")
-                                                  + File.separator + ".m2" + File.separator
-                                                  + "repository"))
-                .toAbsolutePath();
+        String m2 = System.getProperty("user.home") + File.separator + ".m2" + File.separator + "repository";
+        String dir = System.getProperty("maven.repo.local", m2);
+        return Paths.get(dir).toAbsolutePath();
     }
 
 }
diff --git a/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/DependencyUtilTest.java b/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/MavenDependencyResolverTest.java
similarity index 84%
rename from dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/DependencyUtilTest.java
rename to dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/MavenDependencyResolverTest.java
index fbae20cafbe..865eea6eb0e 100644
--- a/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/DependencyUtilTest.java
+++ b/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/MavenDependencyResolverTest.java
@@ -18,17 +18,17 @@ package org.apache.camel.main;
 
 import java.util.List;
 
-import org.apache.camel.main.download.DependencyUtil;
 import org.apache.camel.main.download.MavenArtifact;
+import org.apache.camel.main.download.MavenDependencyResolver;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-public class DependencyUtilTest {
+public class MavenDependencyResolverTest {
 
     @Test
     public void testDownload() throws Exception {
         List<String> deps = List.of("org.apache.camel:camel-core:3.17.0");
-        List<MavenArtifact> answer = DependencyUtil.resolveDependenciesViaAether(deps, null, false, false, true);
+        List<MavenArtifact> answer = MavenDependencyResolver.resolveDependenciesViaAether(deps, null, false, false, true);
         Assertions.assertNotNull(answer);
         Assertions.assertTrue(answer.size() > 15);
     }