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 f1f9edf2901 CAMEL-21542: camel-jbang - Detect known beans from Java imports f1f9edf2901 is described below commit f1f9edf29012e7bbd8050638b3c66ae6b8b75516 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Thu Dec 12 20:07:11 2024 +0100 CAMEL-21542: camel-jbang - Detect known beans from Java imports --- .../java/org/apache/camel/main/KameletMain.java | 5 ++--- .../main/download/JavaKnownImportsDownloader.java | 23 +++++++++++++++------- 2 files changed, 18 insertions(+), 10 deletions(-) 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 326fe34a9b2..8a88fc1e725 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 @@ -496,9 +496,6 @@ public class KameletMain extends MainCommandLineSupport { boolean lazyBean = "true".equals(getInitialProperties().get(getInstanceType() + ".lazyBean")); new AnnotationDependencyInjection(answer, lazyBean); - // add support for automatic downloaded needed JARs from java imports - new JavaKnownImportsDownloader(answer); - if (!silent) { // silent should not include cli-connector // setup cli-connector if not already done @@ -610,6 +607,8 @@ public class KameletMain extends MainCommandLineSupport { .bind(DependencyDownloaderPropertyBindingListener.class.getSimpleName(), listener); answer.getCamelContextExtension().getRegistry().bind(DependencyDownloaderStrategy.class.getSimpleName(), new DependencyDownloaderStrategy(answer)); + // add support for automatic downloaded needed JARs from java imports + new JavaKnownImportsDownloader(answer, knownDeps); // download class-resolver ClassResolver classResolver = new DependencyDownloaderClassResolver(answer, knownDeps, silent); diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/JavaKnownImportsDownloader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/JavaKnownImportsDownloader.java index 914f0472eae..d2a949333f2 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/JavaKnownImportsDownloader.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/JavaKnownImportsDownloader.java @@ -25,6 +25,7 @@ import org.apache.camel.CamelContext; import org.apache.camel.catalog.CamelCatalog; import org.apache.camel.catalog.DefaultCamelCatalog; import org.apache.camel.spi.CompilePreProcessor; +import org.apache.camel.tooling.maven.MavenGav; import org.apache.camel.tooling.model.PojoBeanModel; /** @@ -37,9 +38,11 @@ public class JavaKnownImportsDownloader implements CompilePreProcessor { private final CamelCatalog catalog = new DefaultCamelCatalog(); private final DependencyDownloader downloader; + private final KnownDependenciesResolver knownDependenciesResolver; - public JavaKnownImportsDownloader(CamelContext camelContext) { + public JavaKnownImportsDownloader(CamelContext camelContext, KnownDependenciesResolver knownDependenciesResolver) { this.downloader = camelContext.hasService(DependencyDownloader.class); + this.knownDependenciesResolver = knownDependenciesResolver; camelContext.getRegistry().bind("JavaJoorKnownImportsDownloader", this); } @@ -47,12 +50,18 @@ public class JavaKnownImportsDownloader implements CompilePreProcessor { public void preCompile(CamelContext camelContext, String name, String code) throws Exception { List<String> imports = determineImports(code); for (String imp : imports) { - // is this a known bean then we can determine the dependency - for (String n : catalog.findBeansNames()) { - PojoBeanModel m = catalog.pojoBeanModel(n); - if (m != null && imp.equals(m.getJavaType())) { - downloadLoader(m.getGroupId(), m.getArtifactId(), m.getVersion()); - break; + // attempt known dependency resolver first + MavenGav gav = knownDependenciesResolver.mavenGavForClass(imp); + if (gav != null) { + downloadLoader(gav.getGroupId(), gav.getArtifactId(), gav.getVersion()); + } else { + // is this a known bean then we can determine the dependency + for (String n : catalog.findBeansNames()) { + PojoBeanModel m = catalog.pojoBeanModel(n); + if (m != null && imp.equals(m.getJavaType())) { + downloadLoader(m.getGroupId(), m.getArtifactId(), m.getVersion()); + break; + } } } }