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 742646f730b CAMEL-20736: camel-jbang - Catalog downloaded should not start CamelContext 742646f730b is described below commit 742646f730bfad654204972b99d869fab3ebe370 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Sat May 4 13:19:08 2024 +0200 CAMEL-20736: camel-jbang - Catalog downloaded should not start CamelContext --- .../dsl/jbang/core/commands/ExportBaseCommand.java | 2 + .../dsl/jbang/core/commands/ExportSpringBoot.java | 2 + .../camel/dsl/jbang/core/common/CatalogLoader.java | 105 ++++++++++----------- 3 files changed, 53 insertions(+), 56 deletions(-) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java index e01a9fc7622..a582a9204fb 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java @@ -423,6 +423,8 @@ abstract class ExportBaseCommand extends CamelCommand { } answer.removeAll(toBeRemoved); + System.out.println(answer); + return answer; } 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 d5070320abf..e7d8165bd6f 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 @@ -104,9 +104,11 @@ class ExportSpringBoot extends Export { srcKameletsResourcesDir.mkdirs(); // copy application properties files copyApplicationPropertiesFiles(srcResourcesDir); + // copy source files copySourceFiles(settings, profile, srcJavaDirRoot, srcJavaDir, srcResourcesDir, srcCamelResourcesDir, srcKameletsResourcesDir, srcPackageName); + // copy from settings to profile copySettingsAndProfile(settings, profile, srcResourcesDir, prop -> { if (!hasModeline(settings)) { diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java index d10bb13826d..d06539af851 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/CatalogLoader.java @@ -31,10 +31,10 @@ import org.apache.camel.catalog.CamelCatalog; import org.apache.camel.catalog.DefaultCamelCatalog; import org.apache.camel.catalog.RuntimeProvider; import org.apache.camel.catalog.VersionManager; -import org.apache.camel.main.KameletMain; import org.apache.camel.main.download.DependencyDownloaderClassLoader; import org.apache.camel.main.download.DownloadException; import org.apache.camel.main.download.MavenDependencyDownloader; +import org.apache.camel.support.ObjectHelper; import org.apache.camel.tooling.maven.MavenArtifact; public final class CatalogLoader { @@ -49,27 +49,21 @@ public final class CatalogLoader { } public static CamelCatalog loadCatalog(String repos, String version) throws Exception { + CamelCatalog answer = new DefaultCamelCatalog(); if (version == null) { - CamelCatalog answer = new DefaultCamelCatalog(); + answer = new DefaultCamelCatalog(); answer.enableCache(); return answer; } - // use kamelet-main to dynamic download dependency via maven - KameletMain main = new KameletMain(); + DependencyDownloaderClassLoader cl = new DependencyDownloaderClassLoader(null); + MavenDependencyDownloader downloader = new MavenDependencyDownloader(); + downloader.setClassLoader(cl); + downloader.setRepos(repos); try { - main.setRepos(repos); - // enable stub in silent mode so we do not use real components - main.setSilent(true); - main.setStubPattern("*"); - main.start(); - - // wrap downloaded catalog files in an isolated classloader - DependencyDownloaderClassLoader cl - = new DependencyDownloaderClassLoader(null); + downloader.start(); // download camel-catalog for that specific version - MavenDependencyDownloader downloader = main.getCamelContext().hasService(MavenDependencyDownloader.class); MavenArtifact ma = downloader.downloadArtifact("org.apache.camel", "camel-catalog", version); if (ma != null) { cl.addFile(ma.getFile()); @@ -78,16 +72,20 @@ public final class CatalogLoader { } // re-create answer with the classloader to be able to load resources in this catalog - Class<CamelCatalog> clazz2 - = main.getCamelContext().getClassResolver().resolveClass(DEFAULT_CAMEL_CATALOG, - CamelCatalog.class); - CamelCatalog answer = main.getCamelContext().getInjector().newInstance(clazz2); - answer.setVersionManager(new DownloadCatalogVersionManager(version, cl)); + Class<RuntimeProvider> clazz = (Class<RuntimeProvider>) cl.loadClass(DEFAULT_CAMEL_CATALOG); + if (clazz != null) { + answer.setVersionManager(new DownloadCatalogVersionManager(version, cl)); + RuntimeProvider provider = ObjectHelper.newInstance(clazz); + if (provider != null) { + answer.setRuntimeProvider(provider); + } + } answer.enableCache(); - return answer; } finally { - main.stop(); + downloader.stop(); } + + return answer; } public static CamelCatalog loadSpringBootCatalog(String repos, String version) throws Exception { @@ -96,18 +94,13 @@ public final class CatalogLoader { version = answer.getCatalogVersion(); } - // use kamelet-main to dynamic download dependency via maven - KameletMain main = new KameletMain(); + DependencyDownloaderClassLoader cl = new DependencyDownloaderClassLoader(CatalogLoader.class.getClassLoader()); + MavenDependencyDownloader downloader = new MavenDependencyDownloader(); + downloader.setClassLoader(cl); + downloader.setRepos(repos); try { - main.setRepos(repos); - main.start(); - - // wrap downloaded catalog files in an isolated classloader - DependencyDownloaderClassLoader cl - = new DependencyDownloaderClassLoader(main.getCamelContext().getApplicationContextClassLoader()); + downloader.start(); - // download camel-catalog for that specific version - MavenDependencyDownloader downloader = main.getCamelContext().hasService(MavenDependencyDownloader.class); MavenArtifact ma; String camelCatalogVersion = version; try { @@ -131,26 +124,30 @@ public final class CatalogLoader { "Cannot download org.apache.camel.springboot:camel-catalog-provider-springboot:" + version); } - answer.setVersionManager(new DownloadCatalogVersionManager(version, cl)); Class<RuntimeProvider> clazz = (Class<RuntimeProvider>) cl.loadClass(SPRING_BOOT_CATALOG_PROVIDER); if (clazz != null) { - RuntimeProvider provider = main.getCamelContext().getInjector().newInstance(clazz); + Class<CamelCatalog> clazz2 = (Class<CamelCatalog>) cl.loadClass(DEFAULT_CAMEL_CATALOG); + if (clazz2 != null) { + answer = ObjectHelper.newInstance(clazz2); + } + RuntimeProvider provider = ObjectHelper.newInstance(clazz); if (provider != null) { answer.setRuntimeProvider(provider); } + // use classloader that loaded spring-boot provider to ensure we can load its resources + answer.getVersionManager().setClassLoader(cl); } answer.enableCache(); - } finally { - main.stop(); + downloader.stop(); } return answer; } - public static CamelCatalog loadQuarkusCatalog(String repos, String quarkusVersion) { + public static CamelCatalog loadQuarkusCatalog(String repos, String quarkusVersion) throws Exception { String camelQuarkusVersion = null; - CamelCatalog answer = new DefaultCamelCatalog(true); + CamelCatalog answer = new DefaultCamelCatalog(); if (quarkusVersion == null) { return answer; @@ -161,15 +158,15 @@ public final class CatalogLoader { quarkusVersion += ".Final"; } - // use kamelet-main to dynamic download dependency via maven - KameletMain main = new KameletMain(); + DependencyDownloaderClassLoader cl = new DependencyDownloaderClassLoader(CatalogLoader.class.getClassLoader()); + MavenDependencyDownloader downloader = new MavenDependencyDownloader(); + downloader.setRepos(repos); + downloader.setClassLoader(cl); try { - main.setRepos(repos); - main.start(); + downloader.start(); // shrinkwrap does not return POM file as result (they are hardcoded to be filtered out) // so after this we download a JAR and then use its File location to compute the file for the downloaded POM - MavenDependencyDownloader downloader = main.getCamelContext().hasService(MavenDependencyDownloader.class); MavenArtifact ma = downloader.downloadArtifact("io.quarkus.platform", "quarkus-camel-bom:pom", quarkusVersion); if (ma != null && ma.getFile() != null) { String name = ma.getFile().getAbsolutePath(); @@ -196,27 +193,23 @@ public final class CatalogLoader { // download camel-quarkus-catalog we use to know if we have an extension or not downloader.downloadDependency("org.apache.camel.quarkus", "camel-quarkus-catalog", camelQuarkusVersion); - Class<RuntimeProvider> clazz = main.getCamelContext().getClassResolver().resolveClass(QUARKUS_CATALOG_PROVIDER, - RuntimeProvider.class); + Class<RuntimeProvider> clazz = (Class<RuntimeProvider>) cl.loadClass(QUARKUS_CATALOG_PROVIDER); if (clazz != null) { - RuntimeProvider provider = main.getCamelContext().getInjector().newInstance(clazz); + Class<CamelCatalog> clazz2 = (Class<CamelCatalog>) cl.loadClass(DEFAULT_CAMEL_CATALOG); + if (clazz2 != null) { + answer = ObjectHelper.newInstance(clazz2); + } + RuntimeProvider provider = ObjectHelper.newInstance(clazz); if (provider != null) { - // re-create answer with the classloader that loaded quarkus to be able to load resources in this catalog - Class<CamelCatalog> clazz2 - = main.getCamelContext().getClassResolver().resolveClass(DEFAULT_CAMEL_CATALOG, - CamelCatalog.class); - answer = main.getCamelContext().getInjector().newInstance(clazz2); answer.setRuntimeProvider(provider); - // use classloader that loaded quarkus provider to ensure we can load its resources - answer.getVersionManager().setClassLoader(main.getCamelContext().getApplicationContextClassLoader()); - answer.enableCache(); } + // use classloader that loaded quarkus provider to ensure we can load its resources + answer.getVersionManager().setClassLoader(cl); } } - } catch (Exception e) { - // ignore + answer.enableCache(); } finally { - main.stop(); + downloader.stop(); } return answer;