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 b08461abea2 CAMEL-18188: camel-jbang - Use apache maven to download JARs instead of groovy grape b08461abea2 is described below commit b08461abea2b1e08bab33e959a976e7d7d13a740 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Mon Jun 13 14:19:13 2022 +0200 CAMEL-18188: camel-jbang - Use apache maven to download JARs instead of groovy grape --- dsl/camel-jbang/camel-jbang-core/pom.xml | 5 + dsl/camel-kamelet-main/pom.xml | 14 +- .../java/org/apache/camel/main/CamelGrapeIvy.java | 178 --------------------- .../main/CommandLineDependencyDownloader.java | 6 +- ...y.java => DependencyDownloaderClassLoader.java} | 26 +-- .../main/DependencyDownloaderClassResolver.java | 8 +- .../DependencyDownloaderComponentResolver.java | 7 +- .../DependencyDownloaderDataFormatResolver.java | 7 +- .../camel/main/DependencyDownloaderKamelet.java | 14 +- .../main/DependencyDownloaderLanguageResolver.java | 7 +- ...ependencyDownloaderPropertyBindingListener.java | 7 +- .../main/DependencyDownloaderResourceLoader.java | 8 +- .../main/DependencyDownloaderRoutesLoader.java | 7 +- .../camel/main/DependencyDownloaderStrategy.java | 6 +- .../java/org/apache/camel/main/DependencyUtil.java | 94 +++++++++++ ...nloaderStrategy.java => DownloadException.java} | 21 +-- .../org/apache/camel/main/DownloadThreadPool.java | 2 +- .../org/apache/camel/main/DownloaderHelper.java | 80 +++------ .../java/org/apache/camel/main/KameletMain.java | 34 ++-- ...yDownloaderStrategy.java => MavenArtifact.java} | 30 ++-- .../src/main/resources/camelGrapeConfig.xml | 41 ----- .../src/main/resources/localGrapeConfig.xml | 36 ----- .../org/apache/camel/main/DependencyUtilTest.java} | 26 ++- 23 files changed, 244 insertions(+), 420 deletions(-) diff --git a/dsl/camel-jbang/camel-jbang-core/pom.xml b/dsl/camel-jbang/camel-jbang-core/pom.xml index c3eb3147d06..4a304f38230 100644 --- a/dsl/camel-jbang/camel-jbang-core/pom.xml +++ b/dsl/camel-jbang/camel-jbang-core/pom.xml @@ -51,6 +51,11 @@ <groupId>org.apache.camel</groupId> <artifactId>camel-kamelet-main</artifactId> </dependency> + <!-- TODO: uber-jar uses grape for download --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-grape</artifactId> + </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-resourceresolver-github</artifactId> diff --git a/dsl/camel-kamelet-main/pom.xml b/dsl/camel-kamelet-main/pom.xml index e97a54cbc2d..598408c0637 100644 --- a/dsl/camel-kamelet-main/pom.xml +++ b/dsl/camel-kamelet-main/pom.xml @@ -40,6 +40,7 @@ </properties> <dependencies> + <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-main</artifactId> @@ -76,10 +77,6 @@ <groupId>org.apache.camel</groupId> <artifactId>camel-jfr</artifactId> </dependency> - <dependency> - <groupId>org.apache.camel</groupId> - <artifactId>camel-grape</artifactId> - </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-platform-http-vertx</artifactId> @@ -108,7 +105,12 @@ <groupId>org.apache.camel</groupId> <artifactId>camel-catalog-console</artifactId> </dependency> - + <!-- maven downloader --> + <dependency> + <groupId>org.jboss.shrinkwrap.resolver</groupId> + <artifactId>shrinkwrap-resolver-impl-maven</artifactId> + <version>3.1.4</version> + </dependency> <!-- optional spring annotation support --> <dependency> <groupId>org.springframework</groupId> @@ -127,6 +129,7 @@ <version>${microprofile-config-version}</version> </dependency> + <!-- test --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> @@ -142,7 +145,6 @@ <artifactId>log4j-slf4j-impl</artifactId> <scope>test</scope> </dependency> - </dependencies> <build> diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/CamelGrapeIvy.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/CamelGrapeIvy.java deleted file mode 100644 index 45c1813cb90..00000000000 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/CamelGrapeIvy.java +++ /dev/null @@ -1,178 +0,0 @@ -/* - * 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; - -import java.io.IOException; -import java.text.ParseException; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import groovy.grape.GrapeIvy; -import org.apache.ivy.Ivy; -import org.apache.ivy.core.IvyContext; -import org.apache.ivy.core.cache.ResolutionCacheManager; -import org.apache.ivy.core.event.IvyEvent; -import org.apache.ivy.core.event.IvyListener; -import org.apache.ivy.core.event.download.PrepareDownloadEvent; -import org.apache.ivy.core.event.resolve.StartResolveEvent; -import org.apache.ivy.core.module.descriptor.Artifact; -import org.apache.ivy.core.module.descriptor.DependencyDescriptor; -import org.apache.ivy.core.module.descriptor.ModuleDescriptor; -import org.apache.ivy.core.report.ResolveReport; -import org.apache.ivy.core.resolve.ResolveOptions; -import org.apache.ivy.core.settings.IvySettings; -import org.apache.ivy.util.filter.Filter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import static groovy.grape.Grape.AUTO_DOWNLOAD_SETTING; -import static groovy.grape.Grape.DISABLE_CHECKSUMS_SETTING; - -public class CamelGrapeIvy extends GrapeIvy { - - private static final Logger LOG = LoggerFactory.getLogger(CamelGrapeIvy.class); - - private static CamelGrapeIvy instance; - private final Set<Artifact> extra = new HashSet<>(); - - public CamelGrapeIvy(boolean reportDownloads) { - super(); - - // use wrapper as facade so we can hook into downloading - Ivy wrapper = new IvyWrapper(super.getIvyInstance(), reportDownloads); - setIvyInstance(wrapper); - IvyContext.getContext().setIvy(wrapper); - } - - private static synchronized CamelGrapeIvy getInstance(boolean reportDownload) { - if (instance == null) { - instance = new CamelGrapeIvy(reportDownload); - } - return instance; - } - - public static Set<MavenGav> download(Map<String, Object> dependency, boolean reportDownload) { - Set<MavenGav> extra = new HashSet<>(); - - CamelGrapeIvy instance = getInstance(reportDownload); - if (instance != null) { - if (!dependency.containsKey(AUTO_DOWNLOAD_SETTING)) { - dependency.put(AUTO_DOWNLOAD_SETTING, "true"); - } - if (!dependency.containsKey(DISABLE_CHECKSUMS_SETTING)) { - dependency.put(DISABLE_CHECKSUMS_SETTING, "false"); - } - - instance.extra.clear(); - instance.grab(dependency); - if (instance.extra.size() > 0) { - for (Artifact a : instance.extra) { - String gid = a.getModuleRevisionId().getOrganisation(); - String aid = a.getModuleRevisionId().getName(); - String v = a.getModuleRevisionId().getRevision(); - MavenGav gav = new MavenGav(); - gav.setGroupId(gid); - gav.setArtifactId(aid); - gav.setVersion(v); - extra.add(gav); - } - } - instance.extra.clear(); - } - - return extra; - } - - private class IvyWrapper extends Ivy implements Filter<Artifact> { - - private final Ivy delegate; - - public IvyWrapper(Ivy delegate, boolean reportDownloads) { - this.delegate = delegate; - if (reportDownloads) { - addIvyListener(); - } - } - - @Override - public ResolutionCacheManager getResolutionCacheManager() { - return delegate.getResolutionCacheManager(); - } - - @Override - public IvySettings getSettings() { - return delegate.getSettings(); - } - - @Override - public ResolveReport resolve(ModuleDescriptor md, ResolveOptions options) - throws ParseException, IOException { - options.setArtifactFilter(this); - return delegate.resolve(md, options); - } - - @Override - public boolean accept(Artifact a) { - boolean ok = true; - String type = a.getType(); - if (type != null) { - // only jar,pom is supported - ok = "jar".equals(type) || "pom".equals(type); - if (!ok && "bundle".equals(type) && "jar".equals(a.getExt())) { - // remember as extra download because it cannot be downloaded as bundle type - extra.add(a); - } - } - LOG.trace("Accept Artifact: {}={}", a, ok); - return ok; - } - - private void addIvyListener() { - delegate.getEventManager().addIvyListener(new IvyListener() { - private final Set<String> downloadedArtifacts = new HashSet<>(); - private final Set<String> resolvedDependencies = new HashSet<>(); - - @Override - public void progress(IvyEvent event) { - if (event instanceof StartResolveEvent) { - DependencyDescriptor[] deps = ((StartResolveEvent) event).getModuleDescriptor().getDependencies(); - if (deps != null) { - for (DependencyDescriptor dd : deps) { - var name = dd.toString(); - if (resolvedDependencies.add(name)) { - LOG.info("Resolving: {}", name); - } - } - } - } else if (event instanceof PrepareDownloadEvent) { - Artifact[] arts = ((PrepareDownloadEvent) event).getArtifacts(); - if (arts != null) { - for (Artifact a : arts) { - var name = a.toString(); - if (downloadedArtifacts.add(name)) { - LOG.info("Downloading: {}", name); - } - } - } - } - } - }); - } - } - -} diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/CommandLineDependencyDownloader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/CommandLineDependencyDownloader.java index bb598455bf6..8fbea1a351f 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/CommandLineDependencyDownloader.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/CommandLineDependencyDownloader.java @@ -27,9 +27,11 @@ public class CommandLineDependencyDownloader extends ServiceSupport implements C private CamelContext camelContext; private final String dependencies; + private final String repos; - public CommandLineDependencyDownloader(String dependencies) { + public CommandLineDependencyDownloader(String dependencies, String repos) { this.dependencies = dependencies; + this.repos = repos; } @Override @@ -63,7 +65,7 @@ public class CommandLineDependencyDownloader extends ServiceSupport implements C if (!gavs.isEmpty()) { for (String gav : gavs) { MavenGav mg = MavenGav.parseGav(camelContext, gav); - DownloaderHelper.downloadDependency(camelContext, mg.getGroupId(), mg.getArtifactId(), mg.getVersion()); + DownloaderHelper.downloadDependency(camelContext, repos, mg.getGroupId(), mg.getArtifactId(), mg.getVersion()); } } } diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderStrategy.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderClassLoader.java similarity index 55% copy from dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderStrategy.java copy to dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderClassLoader.java index 6287fb78577..723a976222b 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderStrategy.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderClassLoader.java @@ -16,24 +16,24 @@ */ package org.apache.camel.main; -import org.apache.camel.CamelContext; -import org.apache.camel.spi.DependencyStrategy; +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; -class DependencyDownloaderStrategy implements DependencyStrategy { +public class DependencyDownloaderClassLoader extends URLClassLoader { - private final CamelContext camelContext; + private static final URL[] EMPTY_URL_ARRAY = new URL[0]; - public DependencyDownloaderStrategy(CamelContext camelContext) { - this.camelContext = camelContext; + public DependencyDownloaderClassLoader(ClassLoader parent) { + super(EMPTY_URL_ARRAY, parent); } - @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, gav.getGroupId(), gav.getArtifactId(), - gav.getVersion()); + public void addFile(File file) { + try { + super.addURL(file.toURI().toURL()); + } catch (MalformedURLException e) { + throw new DownloadException("Error adding JAR to classloader: " + file, e); } } - } diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderClassResolver.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderClassResolver.java index d638fe88fb5..cdec350fb63 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderClassResolver.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderClassResolver.java @@ -23,10 +23,14 @@ import org.apache.camel.util.ObjectHelper; final class DependencyDownloaderClassResolver extends DefaultClassResolver { private final KnownDependenciesResolver knownDependenciesResolver; + private final String repos; - public DependencyDownloaderClassResolver(CamelContext camelContext, KnownDependenciesResolver knownDependenciesResolver) { + public DependencyDownloaderClassResolver(CamelContext camelContext, + KnownDependenciesResolver knownDependenciesResolver, + String repos) { super(camelContext); this.knownDependenciesResolver = knownDependenciesResolver; + this.repos = repos; } @Override @@ -44,7 +48,7 @@ final class DependencyDownloaderClassResolver extends DefaultClassResolver { if (gav != null) { if (!DownloaderHelper.alreadyOnClasspath(getCamelContext(), gav.getGroupId(), gav.getArtifactId(), gav.getVersion())) { - DownloaderHelper.downloadDependency(getCamelContext(), gav.getGroupId(), gav.getArtifactId(), + DownloaderHelper.downloadDependency(getCamelContext(), repos, gav.getGroupId(), gav.getArtifactId(), gav.getVersion()); } try { diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderComponentResolver.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderComponentResolver.java index a4cff33c85b..c323d9057f5 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderComponentResolver.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderComponentResolver.java @@ -34,10 +34,12 @@ final class DependencyDownloaderComponentResolver extends DefaultComponentResolv private final CamelCatalog catalog = new DefaultCamelCatalog(); private CamelContext camelContext; + private final String repos; private boolean stub; - public DependencyDownloaderComponentResolver(CamelContext camelContext, boolean stub) { + public DependencyDownloaderComponentResolver(CamelContext camelContext, String repos, boolean stub) { this.camelContext = camelContext; + this.repos = repos; this.stub = stub; } @@ -56,7 +58,8 @@ final class DependencyDownloaderComponentResolver extends DefaultComponentResolv ComponentModel model = catalog.componentModel(name); if (model != null && !DownloaderHelper.alreadyOnClasspath(camelContext, model.getGroupId(), model.getArtifactId(), model.getVersion())) { - DownloaderHelper.downloadDependency(camelContext, model.getGroupId(), model.getArtifactId(), model.getVersion()); + DownloaderHelper.downloadDependency(camelContext, repos, model.getGroupId(), model.getArtifactId(), + model.getVersion()); } Component answer; diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderDataFormatResolver.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderDataFormatResolver.java index af118d7579e..e3eccdfc5eb 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderDataFormatResolver.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderDataFormatResolver.java @@ -31,9 +31,11 @@ final class DependencyDownloaderDataFormatResolver extends DefaultDataFormatReso private final CamelCatalog catalog = new DefaultCamelCatalog(); private CamelContext camelContext; + private final String repos; - public DependencyDownloaderDataFormatResolver(CamelContext camelContext) { + public DependencyDownloaderDataFormatResolver(CamelContext camelContext, String repos) { this.camelContext = camelContext; + this.repos = repos; } @Override @@ -51,7 +53,8 @@ final class DependencyDownloaderDataFormatResolver extends DefaultDataFormatReso DataFormatModel model = catalog.dataFormatModel(name); if (model != null && !DownloaderHelper.alreadyOnClasspath(camelContext, model.getGroupId(), model.getArtifactId(), model.getVersion())) { - DownloaderHelper.downloadDependency(camelContext, model.getGroupId(), model.getArtifactId(), model.getVersion()); + DownloaderHelper.downloadDependency(camelContext, repos, 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/DependencyDownloaderKamelet.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderKamelet.java index caae629d72a..9722e487160 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderKamelet.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderKamelet.java @@ -46,9 +46,14 @@ import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.nodeAt; */ final class DependencyDownloaderKamelet extends ServiceSupport implements CamelContextAware, RouteTemplateLoaderListener { - private final KameletDependencyDownloader downloader = new KameletDependencyDownloader("yaml"); + private final KameletDependencyDownloader downloader; private CamelContext camelContext; + public DependencyDownloaderKamelet(CamelContext camelContext, String repos) { + this.camelContext = camelContext; + this.downloader = new KameletDependencyDownloader("yaml", repos); + } + @Override public CamelContext getCamelContext() { return camelContext; @@ -102,9 +107,11 @@ final class DependencyDownloaderKamelet extends ServiceSupport implements CamelC private static final Logger LOG = LoggerFactory.getLogger(KameletDependencyDownloader.class); private CamelContext camelContext; private final Set<String> downloaded = new HashSet<>(); + private final String repos; - public KameletDependencyDownloader(String extension) { + public KameletDependencyDownloader(String extension, String repos) { super(extension); + this.repos = repos; } @Override @@ -163,7 +170,8 @@ final class DependencyDownloaderKamelet extends ServiceSupport implements CamelC if (!gavs.isEmpty()) { for (String gav : gavs) { MavenGav mg = MavenGav.parseGav(camelContext, gav); - DownloaderHelper.downloadDependency(camelContext, mg.getGroupId(), mg.getArtifactId(), mg.getVersion()); + DownloaderHelper.downloadDependency(camelContext, repos, mg.getGroupId(), mg.getArtifactId(), + mg.getVersion()); downloaded.add(gav); } } diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderLanguageResolver.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderLanguageResolver.java index 40975edd412..a4a60faa170 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderLanguageResolver.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderLanguageResolver.java @@ -31,9 +31,11 @@ final class DependencyDownloaderLanguageResolver extends DefaultLanguageResolver private final CamelCatalog catalog = new DefaultCamelCatalog(); private CamelContext camelContext; + private final String repos; - public DependencyDownloaderLanguageResolver(CamelContext camelContext) { + public DependencyDownloaderLanguageResolver(CamelContext camelContext, String repos) { this.camelContext = camelContext; + this.repos = repos; } @Override @@ -51,7 +53,8 @@ final class DependencyDownloaderLanguageResolver extends DefaultLanguageResolver LanguageModel model = catalog.languageModel(name); if (model != null && !DownloaderHelper.alreadyOnClasspath(camelContext, model.getGroupId(), model.getArtifactId(), model.getVersion())) { - DownloaderHelper.downloadDependency(camelContext, model.getGroupId(), model.getArtifactId(), model.getVersion()); + DownloaderHelper.downloadDependency(camelContext, repos, model.getGroupId(), model.getArtifactId(), + model.getVersion()); } return super.resolveLanguage(name, context); diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderPropertyBindingListener.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderPropertyBindingListener.java index 4054071bd00..a3248356aff 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderPropertyBindingListener.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderPropertyBindingListener.java @@ -23,11 +23,14 @@ class DependencyDownloaderPropertyBindingListener implements PropertyBindingList private final CamelContext camelContext; private final KnownDependenciesResolver knownDependenciesResolver; + private final String repos; public DependencyDownloaderPropertyBindingListener(CamelContext camelContext, - KnownDependenciesResolver knownDependenciesResolver) { + KnownDependenciesResolver knownDependenciesResolver, + String repos) { this.camelContext = camelContext; this.knownDependenciesResolver = knownDependenciesResolver; + this.repos = repos; } @Override @@ -38,7 +41,7 @@ class DependencyDownloaderPropertyBindingListener implements PropertyBindingList if (gav != null) { if (!DownloaderHelper.alreadyOnClasspath(camelContext, gav.getGroupId(), gav.getArtifactId(), gav.getVersion())) { - DownloaderHelper.downloadDependency(camelContext, gav.getGroupId(), gav.getArtifactId(), + DownloaderHelper.downloadDependency(camelContext, repos, gav.getGroupId(), gav.getArtifactId(), gav.getVersion()); } } diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderResourceLoader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderResourceLoader.java index c468a569145..74b7c9fc958 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderResourceLoader.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderResourceLoader.java @@ -24,8 +24,11 @@ import org.apache.camel.util.StringHelper; class DependencyDownloaderResourceLoader extends DefaultResourceLoader { - public DependencyDownloaderResourceLoader(CamelContext camelContext) { + private final String repos; + + public DependencyDownloaderResourceLoader(CamelContext camelContext, String repos) { super(camelContext); + this.repos = repos; } @Override @@ -37,7 +40,8 @@ class DependencyDownloaderResourceLoader extends DefaultResourceLoader { if (!DownloaderHelper.alreadyOnClasspath( getCamelContext(), "org.apache.camel", "camel-resourceresolver-github", getCamelContext().getVersion())) { - DownloaderHelper.downloadDependency(getCamelContext(), "org.apache.camel", "camel-resourceresolver-github", + DownloaderHelper.downloadDependency(getCamelContext(), repos, "org.apache.camel", + "camel-resourceresolver-github", getCamelContext().getVersion()); } } diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderRoutesLoader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderRoutesLoader.java index dccfec89ba7..b86f3a7ddf0 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderRoutesLoader.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderRoutesLoader.java @@ -28,8 +28,11 @@ import org.apache.camel.support.service.ServiceHelper; */ public class DependencyDownloaderRoutesLoader extends MainRoutesLoader { - public DependencyDownloaderRoutesLoader(MainConfigurationProperties configuration) { + private final String repos; + + public DependencyDownloaderRoutesLoader(MainConfigurationProperties configuration, String repos) { super(configuration); + this.repos = repos; } @Override @@ -79,7 +82,7 @@ public class DependencyDownloaderRoutesLoader extends MainRoutesLoader { private void downloadLoader(String artifactId) { if (!DownloaderHelper.alreadyOnClasspath(getCamelContext(), "org.apache.camel", artifactId, getCamelContext().getVersion())) { - DownloaderHelper.downloadDependency(getCamelContext(), "org.apache.camel", artifactId, + DownloaderHelper.downloadDependency(getCamelContext(), repos, "org.apache.camel", artifactId, getCamelContext().getVersion()); } } diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderStrategy.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderStrategy.java index 6287fb78577..8eeaa18d27d 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderStrategy.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderStrategy.java @@ -22,16 +22,18 @@ import org.apache.camel.spi.DependencyStrategy; class DependencyDownloaderStrategy implements DependencyStrategy { private final CamelContext camelContext; + private final String repos; - public DependencyDownloaderStrategy(CamelContext camelContext) { + public DependencyDownloaderStrategy(CamelContext camelContext, String repos) { this.camelContext = camelContext; + this.repos = repos; } @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, gav.getGroupId(), gav.getArtifactId(), + DownloaderHelper.downloadDependency(camelContext, repos, gav.getGroupId(), gav.getArtifactId(), gav.getVersion()); } } diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyUtil.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyUtil.java new file mode 100644 index 00000000000..46aa80fdd50 --- /dev/null +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyUtil.java @@ -0,0 +1,94 @@ +/* + * 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; + +import java.io.File; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; +import java.util.stream.Collectors; + +import org.jboss.shrinkwrap.resolver.api.ResolutionException; +import org.jboss.shrinkwrap.resolver.api.maven.ConfigurableMavenResolverSystem; +import org.jboss.shrinkwrap.resolver.api.maven.Maven; +import org.jboss.shrinkwrap.resolver.api.maven.MavenFormatStage; +import org.jboss.shrinkwrap.resolver.api.maven.MavenResolvedArtifact; +import org.jboss.shrinkwrap.resolver.api.maven.MavenStrategyStage; +import org.jboss.shrinkwrap.resolver.api.maven.repository.MavenRemoteRepositories; +import org.jboss.shrinkwrap.resolver.api.maven.repository.MavenRemoteRepository; +import org.jboss.shrinkwrap.resolver.api.maven.repository.MavenUpdatePolicy; + +final class DependencyUtil { + + private DependencyUtil() { + } + + public static List<MavenArtifact> resolveDependenciesViaAether( + List<String> depIds, List<String> customRepos, + boolean offline, boolean updateCache, boolean transitively) { + + ConfigurableMavenResolverSystem resolver = Maven.configureResolver() + .withMavenCentralRepo(true) + .workOffline(offline); + + if (customRepos != null) { + for (int i = 0; i < customRepos.size(); i++) { + String repo = customRepos.get(i); + MavenRemoteRepository repository + = MavenRemoteRepositories.createRemoteRepository("custom" + i + 1, repo, "default"); + if (updateCache) { + repository.setUpdatePolicy(MavenUpdatePolicy.UPDATE_POLICY_ALWAYS); + } + resolver.withRemoteRepo(repository); + } + } + + System.setProperty("maven.repo.local", getLocalMavenRepo().toAbsolutePath().toString()); + try { + MavenStrategyStage resolve = resolver.resolve(depIds); + + MavenFormatStage stage = transitively ? resolve.withTransitivity() : resolve.withoutTransitivity(); + List<MavenResolvedArtifact> artifacts = stage.asList(MavenResolvedArtifact.class); + + return artifacts.stream() + .map(mra -> { + String gav = mra.getCoordinate().getGroupId() + ":" + mra.getCoordinate().getArtifactId() + ":" + + mra.getCoordinate().getVersion(); + return new MavenArtifact(MavenGav.parseGav(null, gav), mra.asFile()); + }) + .collect(Collectors.toList()); + } catch (ResolutionException e) { + String msg = "Cannot resolve dependencies from maven central"; + if (customRepos != null) { + msg = "Cannot resolve dependencies from " + String.join(", ", customRepos); + } + throw new DownloadException(msg, e); + } catch (RuntimeException e) { + throw new DownloadException("Unknown error occurred while trying to resolve dependencies", e); + } + } + + 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(); + } + +} diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderStrategy.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloadException.java similarity index 54% copy from dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderStrategy.java copy to dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloadException.java index 6287fb78577..588f445df11 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderStrategy.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloadException.java @@ -16,24 +16,13 @@ */ package org.apache.camel.main; -import org.apache.camel.CamelContext; -import org.apache.camel.spi.DependencyStrategy; +public class DownloadException extends RuntimeException { -class DependencyDownloaderStrategy implements DependencyStrategy { - - private final CamelContext camelContext; - - public DependencyDownloaderStrategy(CamelContext camelContext) { - this.camelContext = camelContext; + public DownloadException(String message) { + super(message); } - @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, gav.getGroupId(), gav.getArtifactId(), - gav.getVersion()); - } + public DownloadException(String message, Throwable cause) { + super(message, cause); } - } diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloadThreadPool.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloadThreadPool.java index 6c05046ef40..303a8eaf688 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloadThreadPool.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloadThreadPool.java @@ -48,7 +48,7 @@ class DownloadThreadPool { } catch (TimeoutException e) { // not done } catch (Exception e) { - log.error("Error downloading: " + gav + " due: " + e.getMessage()); + log.error("Error downloading: " + gav + " due: " + e.getMessage(), e); return; } if (!done) { diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloaderHelper.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloaderHelper.java index ec58e90a6ff..1b45164789d 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloaderHelper.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DownloaderHelper.java @@ -17,16 +17,13 @@ package org.apache.camel.main; import java.io.File; -import java.io.InputStream; import java.net.URL; import java.net.URLClassLoader; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.atomic.AtomicBoolean; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; import org.apache.camel.CamelContext; -import org.apache.camel.util.IOHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,12 +36,13 @@ public final class DownloaderHelper { private static final String CP = System.getProperty("java.class.path"); private static final DownloadThreadPool DOWNLOAD_THREAD_POOL = new DownloadThreadPool(); - private static final AtomicBoolean VERBOSE_DOWNLOAD = new AtomicBoolean(); private DownloaderHelper() { } - public static void downloadDependency(CamelContext camelContext, String groupId, String artifactId, String version) { + public static void downloadDependency( + CamelContext camelContext, String repos, + String groupId, String artifactId, String version) { // trigger listener DownloadListener listener = camelContext.getExtension(DownloadListener.class); @@ -67,25 +65,23 @@ public final class DownloaderHelper { } } - Map<String, Object> map = new HashMap<>(); - map.put("classLoader", camelContext.getApplicationContextClassLoader()); - map.put("group", groupId); - map.put("module", artifactId); - map.put("version", version); - map.put("classifier", ""); - String gav = groupId + ":" + artifactId + ":" + version; DOWNLOAD_THREAD_POOL.download(LOG, () -> { LOG.debug("Downloading: {}", gav); - Set<MavenGav> extra = CamelGrapeIvy.download(map, VERBOSE_DOWNLOAD.get()); - for (MavenGav egav : extra) { - Map<String, Object> emap = new HashMap<>(); - emap.put("classLoader", camelContext.getApplicationContextClassLoader()); - emap.put("group", egav.getGroupId()); - emap.put("module", egav.getArtifactId()); - emap.put("version", egav.getVersion()); - LOG.debug("Downloading Additional: {}", egav); - CamelGrapeIvy.download(emap, VERBOSE_DOWNLOAD.get()); + List<String> deps = List.of(gav); + List<String> customRepos = null; + if (repos != null) { + customRepos = Arrays.stream(repos.split(",")).collect(Collectors.toList()); + } + List<MavenArtifact> artifacts = DependencyUtil.resolveDependenciesViaAether(deps, customRepos, false, true, true); + LOG.debug("Resolved {} -> [{}]", gav, artifacts); + + DependencyDownloaderClassLoader classLoader + = (DependencyDownloaderClassLoader) camelContext.getApplicationContextClassLoader(); + for (MavenArtifact a : artifacts) { + File file = a.getFile(); + classLoader.addFile(file); + LOG.trace("Added classpath: {}", a.getGav()); } }, gav); } @@ -122,40 +118,4 @@ public final class DownloaderHelper { return false; } - public static void prepareDownloader(CamelContext camelContext, String repos, boolean download, boolean verbose) - throws Exception { - InputStream is = download - ? DownloaderHelper.class.getResourceAsStream("/camelGrapeConfig.xml") - : DownloaderHelper.class.getResourceAsStream("/localGrapeConfig.xml"); - if (is != null) { - String xml = IOHelper.loadText(is); - if (download && repos != null) { - StringBuilder sb = new StringBuilder(); - sb.append(" <!-- custom repositories -->"); - int i = 0; - for (String repo : repos.split(",")) { - i++; - sb.append(String.format("\n <url name=\"custom%s\" m2compatible=\"true\">", i)); - sb.append(String.format( - "\n <artifact pattern=\"%s/[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]\"/>", - repo)); - sb.append(String.format("\n </url>")); - } - xml = xml.replace(" <!-- @repos@ -->", sb.toString()); - } - - // save file to local disk and point grape to use this - File out = new File(".camel-jbang/camelGrapeConfig.xml"); - IOHelper.writeText(xml, out); - - // Grape should use our custom configuration file - System.setProperty("grape.config", out.getAbsolutePath()); - if (verbose) { - VERBOSE_DOWNLOAD.set(true); - } - - IOHelper.close(is); - } - } - } 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 039c9bc605c..506f55a3835 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 @@ -21,7 +21,6 @@ import java.util.LinkedList; import java.util.Map; import java.util.Objects; -import groovy.lang.GroovyClassLoader; import org.apache.camel.CamelContext; import org.apache.camel.ExtendedCamelContext; import org.apache.camel.ProducerTemplate; @@ -43,7 +42,7 @@ public class KameletMain extends MainCommandLineSupport { private String repos; private boolean stub; private DownloadListener downloadListener; - private GroovyClassLoader groovyClassLoader; + private DependencyDownloaderClassLoader classLoader; public KameletMain() { configureInitialProperties(DEFAULT_KAMELETS_LOCATION); @@ -320,29 +319,25 @@ public class KameletMain extends MainCommandLineSupport { } try { - // prepare grape config with custom repositories - // use resolvers that can auto downloaded (either local or over the internet) - DownloaderHelper.prepareDownloader(camelContext, repos, download, downloadVerbose); - // dependencies from CLI Object dependencies = getInitialProperties().get("camel.jbang.dependencies"); if (dependencies != null) { - answer.addService(new CommandLineDependencyDownloader(dependencies.toString())); + answer.addService(new CommandLineDependencyDownloader(dependencies.toString(), repos)); } KnownDependenciesResolver known = new KnownDependenciesResolver(answer); known.loadKnownDependencies(); DependencyDownloaderPropertyBindingListener listener - = new DependencyDownloaderPropertyBindingListener(answer, known); + = new DependencyDownloaderPropertyBindingListener(answer, known, repos); answer.getRegistry().bind(DependencyDownloaderPropertyBindingListener.class.getName(), listener); answer.getRegistry().bind(DependencyDownloaderStrategy.class.getName(), - 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()); + new DependencyDownloaderStrategy(answer, repos)); + answer.setClassResolver(new DependencyDownloaderClassResolver(answer, known, repos)); + answer.setComponentResolver(new DependencyDownloaderComponentResolver(answer, repos, stub)); + answer.setDataFormatResolver(new DependencyDownloaderDataFormatResolver(answer, repos)); + answer.setLanguageResolver(new DependencyDownloaderLanguageResolver(answer, repos)); + answer.setResourceLoader(new DependencyDownloaderResourceLoader(answer, repos)); + answer.addService(new DependencyDownloaderKamelet(answer, repos)); } catch (Exception e) { throw RuntimeCamelException.wrapRuntimeException(e); } @@ -359,7 +354,7 @@ public class KameletMain extends MainCommandLineSupport { } protected ClassLoader createApplicationContextClassLoader() { - if (groovyClassLoader == null) { + if (classLoader == null) { // create class loader (that are download capable) only once // any additional files to add to classpath ClassLoader parentCL = KameletMain.class.getClassLoader(); @@ -368,16 +363,17 @@ public class KameletMain extends MainCommandLineSupport { parentCL = new ExtraFilesClassLoader(parentCL, cpFiles.split(",")); LOG.info("Additional files added to classpath: {}", cpFiles); } - groovyClassLoader = new GroovyClassLoader(parentCL); + classLoader = new DependencyDownloaderClassLoader(parentCL); } - return groovyClassLoader; + return classLoader; } @Override protected void configureRoutesLoader(CamelContext camelContext) { if (download) { // use resolvers that can auto downloaded - camelContext.adapt(ExtendedCamelContext.class).setRoutesLoader(new DependencyDownloaderRoutesLoader(configure())); + camelContext.adapt(ExtendedCamelContext.class) + .setRoutesLoader(new DependencyDownloaderRoutesLoader(configure(), repos)); } else { super.configureRoutesLoader(camelContext); } diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderStrategy.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/MavenArtifact.java similarity index 55% copy from dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderStrategy.java copy to dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/MavenArtifact.java index 6287fb78577..9962f561d16 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderStrategy.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/MavenArtifact.java @@ -16,24 +16,28 @@ */ package org.apache.camel.main; -import org.apache.camel.CamelContext; -import org.apache.camel.spi.DependencyStrategy; +import java.io.File; -class DependencyDownloaderStrategy implements DependencyStrategy { +public class MavenArtifact { - private final CamelContext camelContext; + private final MavenGav gav; + private final File file; - public DependencyDownloaderStrategy(CamelContext camelContext) { - this.camelContext = camelContext; + public MavenArtifact(MavenGav gav, File file) { + this.gav = gav; + this.file = file; } - @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, gav.getGroupId(), gav.getArtifactId(), - gav.getVersion()); - } + public MavenGav getGav() { + return gav; + } + + public File getFile() { + return file; } + @Override + public String toString() { + return gav.toString(); + } } diff --git a/dsl/camel-kamelet-main/src/main/resources/camelGrapeConfig.xml b/dsl/camel-kamelet-main/src/main/resources/camelGrapeConfig.xml deleted file mode 100644 index 50ea1457cf6..00000000000 --- a/dsl/camel-kamelet-main/src/main/resources/camelGrapeConfig.xml +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - 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. - ---> -<ivysettings> - <!-- disable download of source and javadoc to be faster --> - <property name="ivy.maven.lookup.sources" value="false"/> - <property name="ivy.maven.lookup.javadoc" value="false"/> - <settings defaultResolver="downloadGrapes"/> - <resolvers> - <chain name="downloadGrapes" returnFirst="true"> - <!-- grapes --> - <filesystem name="cachedGrapes"> - <ivy pattern="${user.home}/.groovy/grapes/[organisation]/[module]/ivy-[revision].xml"/> - <artifact pattern="${user.home}/.groovy/grapes/[organisation]/[module]/[type]s/[artifact]-[revision](-[classifier]).[ext]"/> - </filesystem> - <!-- local m2 --> - <ibiblio name="localm2" root="${user.home.url}/.m2/repository/" checkmodified="true" changingPattern=".*" changingMatcher="regexp" m2compatible="true"/> - <!-- maven central --> - <ibiblio name="maven2" m2compatible="true"/> - <!-- apache snapshot --> - <ibiblio name="apacheSnapshots" root="https://repository.apache.org/snapshots" m2compatible="true" changingMatcher="regexp" changingPattern=".*SNAPSHOT.*" checkmodified="true" /> - <!-- @repos@ --> - </chain> - </resolvers> -</ivysettings> diff --git a/dsl/camel-kamelet-main/src/main/resources/localGrapeConfig.xml b/dsl/camel-kamelet-main/src/main/resources/localGrapeConfig.xml deleted file mode 100644 index cb4f490397d..00000000000 --- a/dsl/camel-kamelet-main/src/main/resources/localGrapeConfig.xml +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - - 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. - ---> -<ivysettings> - <!-- disable download of source and javadoc to be faster --> - <property name="ivy.maven.lookup.sources" value="false"/> - <property name="ivy.maven.lookup.javadoc" value="false"/> - <settings defaultResolver="downloadGrapes"/> - <resolvers> - <chain name="downloadGrapes" returnFirst="true"> - <!-- grapes --> - <filesystem name="cachedGrapes"> - <ivy pattern="${user.home}/.groovy/grapes/[organisation]/[module]/ivy-[revision].xml"/> - <artifact pattern="${user.home}/.groovy/grapes/[organisation]/[module]/[type]s/[artifact]-[revision](-[classifier]).[ext]"/> - </filesystem> - <!-- local m2 --> - <ibiblio name="localm2" root="${user.home.url}/.m2/repository/" checkmodified="true" changingPattern=".*" changingMatcher="regexp" m2compatible="true"/> - </chain> - </resolvers> -</ivysettings> diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderStrategy.java b/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/DependencyUtilTest.java similarity index 53% copy from dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderStrategy.java copy to dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/DependencyUtilTest.java index 6287fb78577..374b17fc6ed 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/DependencyDownloaderStrategy.java +++ b/dsl/camel-kamelet-main/src/test/java/org/apache/camel/main/DependencyUtilTest.java @@ -16,24 +16,18 @@ */ package org.apache.camel.main; -import org.apache.camel.CamelContext; -import org.apache.camel.spi.DependencyStrategy; +import java.util.List; -class DependencyDownloaderStrategy implements DependencyStrategy { +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; - private final CamelContext camelContext; +public class DependencyUtilTest { - public DependencyDownloaderStrategy(CamelContext camelContext) { - this.camelContext = camelContext; + @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); + Assertions.assertNotNull(answer); + Assertions.assertTrue(answer.size() > 15); } - - @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, gav.getGroupId(), gav.getArtifactId(), - gav.getVersion()); - } - } - }