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 93289bfca84 CAMEL-22165: camel-jbang dependency runtime (deep analysis to resolve from parent poms) (#18358) 93289bfca84 is described below commit 93289bfca842a1e17957a2d303d8554641387861 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Fri Jun 13 07:45:47 2025 +0200 CAMEL-22165: camel-jbang dependency runtime (deep analysis to resolve from parent poms) (#18358) --- .../dsl/jbang/core/commands/DependencyRuntime.java | 194 ++++++++++----------- .../apache/camel/dsl/jbang/core/commands/Run.java | 2 +- .../camel/dsl/jbang/core/commands/RunHelper.java | 173 ++++++++++++------ .../camel/dsl/jbang/core/common/CatalogLoader.java | 25 +++ .../dsl/jbang/core/common/RuntimeInformation.java | 81 --------- .../jbang/core/commands/DependencyRuntimeTest.java | 24 ++- .../src/test/resources/pom-xml-files/main-pom.xml | 145 +++++++++++++++ 7 files changed, 402 insertions(+), 242 deletions(-) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyRuntime.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyRuntime.java index d26a89171d2..787abb4ff12 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyRuntime.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyRuntime.java @@ -18,30 +18,26 @@ package org.apache.camel.dsl.jbang.core.commands; import java.nio.file.Files; import java.nio.file.Path; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; import java.util.StringJoiner; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.camel.catalog.CamelCatalog; import org.apache.camel.dsl.jbang.core.common.CatalogLoader; -import org.apache.camel.dsl.jbang.core.common.RuntimeInformation; -import org.apache.camel.dsl.jbang.core.common.RuntimeType; -import org.apache.camel.dsl.jbang.core.common.XmlHelper; +import org.apache.camel.tooling.maven.MavenGav; +import org.apache.camel.util.json.Jsoner; +import org.apache.maven.model.Model; +import org.apache.maven.model.Repository; import picocli.CommandLine; @CommandLine.Command(name = "runtime", description = "Display Camel runtime and version for given Maven project", sortOptions = false, showDefaultValues = true) public class DependencyRuntime extends CamelCommand { - @CommandLine.Parameters(description = "The pom.xml to analyze.", arity = "1", paramLabel = "<pom.xml>") - public Path pomXml; + @CommandLine.Parameters(description = "The pom.xml to analyze", arity = "1", paramLabel = "<pom.xml>") + Path pomXml; + @CommandLine.Option(names = { "--json" }, description = "Output in JSON Format") boolean jsonOutput; @@ -57,117 +53,115 @@ public class DependencyRuntime extends CamelCommand { return 1; } - DocumentBuilderFactory dbf = XmlHelper.createDocumentBuilderFactory(); - DocumentBuilder db = dbf.newDocumentBuilder(); - Document dom = db.parse(Files.newInputStream(pomXml)); - NodeList nl = dom.getElementsByTagName("dependency"); - - RuntimeInformation runtimeInformation = new RuntimeInformation(); - - for (int i = 0; i < nl.getLength(); i++) { - Element node = (Element) nl.item(i); + Model model = RunHelper.loadMavenModel(pomXml); + if (model == null) { + return 0; + } - // must be child at <project/dependencyManagement> or <project/dependencies> - String p = node.getParentNode().getNodeName(); - String p2 = node.getParentNode().getParentNode().getNodeName(); - boolean accept = ("dependencyManagement".equals(p2) || "project".equals(p2)) && (p.equals("dependencies")); - if (!accept) { - continue; - } + List<String> deps = RunHelper.scanMavenDependenciesFromModel(pomXml, model); + if (deps.isEmpty()) { + return 0; + } - String g = node.getElementsByTagName("groupId").item(0).getTextContent(); - String a = node.getElementsByTagName("artifactId").item(0).getTextContent(); - String v = null; - NodeList vl = node.getElementsByTagName("version"); - if (vl.getLength() > 0) { - v = vl.item(0).getTextContent(); + String camelVersion = null; + String camelSpringBootVersion = null; + String camelQuarkusVersion = null; + String springBootVersion = null; + String quarkusVersion = null; + String quarkusGroupId = null; + + for (String dep : deps) { + MavenGav gav = MavenGav.parseGav(dep); + if (camelVersion == null && "org.apache.camel".equals(gav.getGroupId())) { + camelVersion = gav.getVersion(); } - - // BOMs - if ("org.apache.camel".equals(g) && "camel-bom".equals(a)) { - runtimeInformation.setCamelVersion(v); - continue; + if (camelSpringBootVersion == null && "org.apache.camel.springboot".equals(gav.getGroupId())) { + camelSpringBootVersion = gav.getVersion(); } - if ("org.apache.camel.springboot".equals(g) && "camel-spring-boot-bom".equals(a)) { - runtimeInformation.setCamelVersion(v); - continue; + if (camelQuarkusVersion == null && "org.apache.camel.quarkus".equals(gav.getGroupId())) { + camelQuarkusVersion = gav.getVersion(); } - if ("org.springframework.boot".equals(g) && "spring-boot-dependencies".equals(a)) { - runtimeInformation.setSpringBootVersion(v); - continue; + if (springBootVersion == null && "org.springframework.boot".equals(gav.getGroupId())) { + springBootVersion = gav.getVersion(); } - if (("${quarkus.platform.group-id}".equals(g) || "io.quarkus.platform".equals(g)) && - ("${quarkus.platform.artifact-id}".equals(a) || "quarkus-bom".equals(a))) { - if ("${quarkus.platform.version}".equals(v)) { - runtimeInformation.setQuarkusVersion( - dom.getElementsByTagName("quarkus.platform.version").item(0).getTextContent()); - } else { - runtimeInformation.setQuarkusVersion(v); - } - continue; + if (quarkusVersion == null && "io.quarkus".equals(gav.getGroupId())) { + quarkusVersion = gav.getVersion(); } - if (("${quarkus.platform.group-id}".equals(g))) { - runtimeInformation.setQuarkusGroupId( - dom.getElementsByTagName("quarkus.platform.group-id").item(0).getTextContent()); + if (quarkusGroupId == null && "quarkus-bom".equals(gav.getArtifactId())) { + quarkusGroupId = gav.getGroupId(); + quarkusVersion = gav.getVersion(); } } - String repos = null; - StringJoiner sj = new StringJoiner(","); - nl = dom.getElementsByTagName("repository"); - for (int i = 0; i < nl.getLength(); i++) { - Element node = (Element) nl.item(i); - - // must be child at <repositories/repository> - String p = node.getParentNode().getNodeName(); - boolean accept = "repositories".equals(p); - if (!accept) { - continue; + if (springBootVersion != null && camelVersion == null) { + StringJoiner sj = new StringJoiner(","); + for (Repository r : model.getRepositories()) { + sj.add(r.getUrl()); } - String url = node.getElementsByTagName("url").item(0).getTextContent(); - sj.add(url); - } - if (sj.length() > 0) { - repos = sj.toString(); + String repos = sj.length() > 0 ? sj.toString() : null; + camelVersion = CatalogLoader.resolveCamelVersionFromSpringBoot(repos, camelSpringBootVersion); } - // it's a bit harder to know the camel version from Quarkus because of the universal BOM - if (runtimeInformation.getQuarkusVersion() != null && runtimeInformation.getCamelVersion() == null) { - CamelCatalog catalog = CatalogLoader.loadQuarkusCatalog(repos, runtimeInformation.getQuarkusVersion(), - runtimeInformation.getQuarkusGroupId()); + // its a bit harder to know the camel version from Quarkus because of the universal BOM + if (quarkusVersion != null && camelVersion == null) { + StringJoiner sj = new StringJoiner(","); + for (Repository r : model.getRepositories()) { + sj.add(r.getUrl()); + } + String repos = sj.length() > 0 ? sj.toString() : null; + CamelCatalog catalog = CatalogLoader.loadQuarkusCatalog(repos, quarkusVersion, quarkusGroupId); if (catalog != null) { // find out the camel quarkus version via the constant language that are built-in camel-core - runtimeInformation.setCamelQuarkusVersion(catalog.languageModel("constant").getVersion()); + camelQuarkusVersion = catalog.languageModel("constant").getVersion(); // okay so the camel version is also hard to resolve from quarkus - runtimeInformation.setCamelVersion(CatalogLoader.resolveCamelVersionFromQuarkus(repos, - runtimeInformation.getCamelQuarkusVersion())); + camelVersion = CatalogLoader.resolveCamelVersionFromQuarkus(repos, camelQuarkusVersion); } } - runtimeInformation.setType(RuntimeType.main); - if (runtimeInformation.getSpringBootVersion() != null) { - runtimeInformation.setType(RuntimeType.springBoot); - } else if (runtimeInformation.getQuarkusVersion() != null) { - runtimeInformation.setType(RuntimeType.quarkus); + String runtime = "camel-main"; + if (springBootVersion != null) { + runtime = "camel-spring-boot"; + } else if (quarkusVersion != null) { + runtime = "camel-quarkus"; } if (jsonOutput) { - ObjectMapper mapper = new ObjectMapper(); - mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - String json = mapper.writeValueAsString(runtimeInformation); - printer().println(json); + Map<String, String> map = new LinkedHashMap<>(); + map.put("runtime", runtime); + if (camelVersion != null) { + map.put("camelVersion", camelVersion); + } + if (camelSpringBootVersion != null) { + map.put("camelSpringBootVersion", camelSpringBootVersion); + } + if (camelQuarkusVersion != null) { + map.put("camelQuarkusVersion", camelQuarkusVersion); + } + if (springBootVersion != null) { + map.put("springBootVersion", springBootVersion); + } + if (quarkusVersion != null) { + map.put("quarkusVersion", quarkusVersion); + } + if (quarkusGroupId != null) { + map.put("quarkusGroupId", quarkusGroupId); + } + printer().println(Jsoner.serialize(map)); } else { - printer().println("Runtime: " + runtimeInformation.getType()); - if (runtimeInformation.getCamelVersion() != null) { - printer().println("Camel Version: " + runtimeInformation.getCamelVersion()); + printer().println("Runtime: " + runtime); + if (camelVersion != null) { + printer().println("Camel Version: " + camelVersion); + } + if (camelSpringBootVersion != null) { + printer().println("Camel Spring Boot Version: " + camelSpringBootVersion); } - if (runtimeInformation.getCamelQuarkusVersion() != null) { - printer().println("Camel Quarkus Version: " + runtimeInformation.getCamelQuarkusVersion()); + if (camelQuarkusVersion != null) { + printer().println("Camel Quarkus Version: " + camelQuarkusVersion); } - if (runtimeInformation.getSpringBootVersion() != null) { - printer().println("Spring Boot Version: " + runtimeInformation.getSpringBootVersion()); - } else if (runtimeInformation.getQuarkusVersion() != null) { - printer().println("Quarkus Version: " + runtimeInformation.getQuarkusVersion()); + if (springBootVersion != null) { + printer().println("Spring Boot Version: " + springBootVersion); + } else if (quarkusVersion != null) { + printer().println("Quarkus Version: " + quarkusVersion); } } 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 a973234597e..1787954d53b 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 @@ -733,7 +733,7 @@ public class Run extends CamelCommand { // find source files files = RunHelper.scanMavenOrGradleProject(); // include extra dependencies from pom.xml - var pomDependencies = RunHelper.scanMavenDependenciesFromPom(); + var pomDependencies = RunHelper.scanMavenDependenciesFromPom(Paths.get("pom.xml")); addDependencies(pomDependencies.toArray(new String[0])); } diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/RunHelper.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/RunHelper.java index 57f2c986327..8f5e2607ff6 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/RunHelper.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/RunHelper.java @@ -23,15 +23,20 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.StringJoiner; import java.util.stream.Stream; import org.apache.camel.catalog.CamelCatalog; import org.apache.camel.catalog.DefaultCamelCatalog; +import org.apache.camel.main.download.MavenDependencyDownloader; +import org.apache.camel.tooling.maven.MavenArtifact; +import org.apache.camel.util.FileUtil; import org.apache.camel.util.ReflectionHelper; -import org.apache.camel.util.StringHelper; import org.apache.maven.model.Dependency; import org.apache.maven.model.Model; +import org.apache.maven.model.Repository; import org.apache.maven.model.io.xpp3.MavenXpp3Reader; public final class RunHelper { @@ -56,68 +61,108 @@ public final class RunHelper { return null; } - public static List<String> scanMavenDependenciesFromPom() { - List<String> answer = new ArrayList<>(); - - Path pomPath = Paths.get("pom.xml"); + public static Model loadMavenModel(Path pomPath) throws Exception { + Model answer = null; if (Files.exists(pomPath) && Files.isRegularFile(pomPath)) { - CamelCatalog catalog = new DefaultCamelCatalog(); - // find additional dependencies form pom.xml MavenXpp3Reader mavenReader = new MavenXpp3Reader(); try (Reader reader = Files.newBufferedReader(pomPath)) { - Model model = mavenReader.read(reader); - model.setPomFile(pomPath.toFile()); // Still need File for Maven Model + answer = mavenReader.read(reader); + answer.setPomFile(pomPath.toFile()); // Still need File for Maven Model + } + } + return answer; + } - for (Dependency d : model.getDependencies()) { - String g = d.getGroupId(); - String scope = d.getScope(); - boolean accept = scope == null || "compile".equals(scope); - // 3rd party dependencies - if (accept && !g.startsWith("org.apache.camel")) { - String v = d.getVersion(); - if (v != null && v.startsWith("${") && v.endsWith("}")) { - // version uses placeholder, so try to find them - v = v.substring(2, v.length() - 1); - v = findMavenProperty((Path) pomPath, v); - } - if (v != null) { - String gav = "mvn:" + g + ":" + d.getArtifactId() + ":" + v; - if (!answer.contains(gav)) { - answer.add(gav); - } - } - } else if (accept && g.startsWith("org.apache.camel")) { - // camel dependencies - String a = d.getArtifactId(); + public static List<String> scanMavenDependenciesFromPom(Path pomPath) throws Exception { + Model model = loadMavenModel(pomPath); + if (model != null) { + return scanMavenDependenciesFromModel(pomPath, model); + } + return Collections.EMPTY_LIST; + } - if (!isInCamelCatalog(catalog, a)) { - // not a known camel artifact - continue; - } + public static List<String> scanMavenDependenciesFromModel(Path pomPath, Model model) throws Exception { + String camelVersion = null; + String camelSpringBootVersion = null; + String springBootVersion = null; + String quarkusVersion = null; - if (a.endsWith("-starter")) { - a = StringHelper.before(a, "-starter"); - } - if (a.startsWith("camel-quarkus-")) { - a = StringHelper.after(a, "camel-quarkus"); - } - if (a.startsWith("camel-")) { - a = StringHelper.after(a, "camel-"); - } - String gav = "camel:" + a; - if (!answer.contains(gav)) { - answer.add(gav); - } + StringJoiner sj = new StringJoiner(","); + for (Repository r : model.getRepositories()) { + sj.add(r.getUrl()); + } + + MavenDependencyDownloader downloader = new MavenDependencyDownloader(); + if (sj.length() > 0) { + downloader.setRepositories(sj.toString()); + } + downloader.build(); + + List<String> answer = new ArrayList<>(); + if (model.getDependencyManagement() != null) { + for (Dependency d : model.getDependencyManagement().getDependencies()) { + String g = resolveDependencyPlaceholder(d.getGroupId(), pomPath, downloader); + String a = resolveDependencyPlaceholder(d.getArtifactId(), pomPath, downloader); + String v = resolveDependencyPlaceholder(d.getVersion(), pomPath, downloader); + if (v != null) { + if ("org.apache.camel".equals(g) && "camel-bom".equals(a)) { + camelVersion = v; + } else if ("org.apache.camel.springboot".equals(g) + && "camel-spring-boot-bom".equals(a)) { + camelSpringBootVersion = v; + } else if ("org.springframework.boot".equals(g) + && "spring-boot-dependencies".equals(a)) { + springBootVersion = v; + } else if ("io.quarkus.platform".equals(g) + && "quarkus-bom".equals(a)) { + quarkusVersion = v; + } + String gav = "mvn:" + g + ":" + a + ":" + v; + if (!answer.contains(gav)) { + answer.add(gav); } } - } catch (Exception ex) { - // do something better here + } + } + + for (Dependency d : model.getDependencies()) { + String scope = d.getScope(); + boolean accept = scope == null || "compile".equals(scope); + if (accept) { + String g = resolveDependencyPlaceholder(d.getGroupId(), pomPath, downloader); + String a = resolveDependencyPlaceholder(d.getArtifactId(), pomPath, downloader); + String v = resolveDependencyPlaceholder(d.getVersion(), pomPath, downloader); + if (v == null && ("org.apache.camel".equals(g))) { + v = camelVersion; + } else if (v == null && ("org.apache.camel.springboot".equals(g))) { + v = camelSpringBootVersion; + } else if (v == null && "org.springframework.boot".equals(g)) { + v = springBootVersion; + } else if (v == null && "io.quarkus.platform".equals(g)) { + v = quarkusVersion; + } + String gav = "mvn:" + g + ":" + a; + if (v != null) { + gav += ":" + v; + } + if (!answer.contains(gav)) { + answer.add(gav); + } } } return answer; } + private static String resolveDependencyPlaceholder(String value, Path pomPath, MavenDependencyDownloader downloader) { + if (value != null && value.startsWith("${") && value.endsWith("}")) { + // version uses placeholder, so try to find them + value = value.substring(2, value.length() - 1); + value = findMavenProperty(pomPath, value, downloader); + } + return value; + } + public static List<String> scanMavenOrGradleProject() { List<String> answer = new ArrayList<>(); @@ -129,7 +174,7 @@ public final class RunHelper { return answer; } - public static String findMavenProperty(Path pomPath, String placeholder) { + public static String findMavenProperty(Path pomPath, String placeholder, MavenDependencyDownloader downloader) { if (Files.exists(pomPath) && Files.isRegularFile(pomPath)) { // find additional dependencies form pom.xml MavenXpp3Reader mavenReader = new MavenXpp3Reader(); @@ -137,13 +182,33 @@ public final class RunHelper { Model model = mavenReader.read(reader); model.setPomFile(pomPath.toFile()); // Still need File for Maven Model String p = model.getProperties().getProperty(placeholder); + if (p != null && p.startsWith("${") && p.endsWith("}")) { + p = p.substring(2, p.length() - 1); + if ("project.version".equals(p)) { + p = model.getVersion(); + } else { + p = model.getProperties().getProperty(p); + } + } if (p != null) { return p; } else if (model.getParent() != null) { p = model.getParent().getRelativePath(); if (p != null) { - Path parentPath = pomPath.getParent().resolve(p); - return findMavenProperty(parentPath, placeholder); + String dir = FileUtil.onlyPath(pomPath.toAbsolutePath().toString()); + p = FileUtil.compactPath(dir + "/" + p); + pomPath = Paths.get(p); + boolean exists = Files.exists(pomPath) && Files.isRegularFile(pomPath); + if (exists) { + return findMavenProperty(pomPath, placeholder, downloader); + } else if (downloader != null) { + // download dependency as it's not in local path + MavenArtifact ma = downloader.downloadArtifact(model.getParent().getGroupId(), + model.getParent().getArtifactId() + ":pom", model.getParent().getVersion()); + if (ma != null) { + return findMavenProperty(ma.getFile(), placeholder, downloader); + } + } } } } catch (Exception ex) { @@ -155,8 +220,8 @@ public final class RunHelper { // Keep for backward compatibility @Deprecated - public static String findMavenProperty(java.io.File f, String placeholder) { - return findMavenProperty(f.toPath(), placeholder); + public static String findMavenProperty(java.io.File f, String placeholder, MavenDependencyDownloader downloader) { + return findMavenProperty(f.toPath(), placeholder, downloader); } public static Stream<Path> walk(Path dir) { 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 fc5fa5d1ac7..cd15e32aff0 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 @@ -224,6 +224,31 @@ public final class CatalogLoader { return answer; } + public static String resolveCamelVersionFromSpringBoot(String repos, String camelSpringBootVersion) throws Exception { + DependencyDownloaderClassLoader cl = new DependencyDownloaderClassLoader(CatalogLoader.class.getClassLoader()); + MavenDependencyDownloader downloader = new MavenDependencyDownloader(); + downloader.setRepositories(repos); + downloader.setClassLoader(cl); + try { + downloader.start(); + + List<MavenArtifact> artifacts + = downloader.downloadArtifacts("org.apache.camel.springboot", "camel-catalog-provider-springboot", + camelSpringBootVersion, true); + for (MavenArtifact ma : artifacts) { + String g = ma.getGav().getGroupId(); + String a = ma.getGav().getArtifactId(); + if ("org.apache.camel".equals(g) && "camel-catalog".equals(a)) { + return ma.getGav().getVersion(); + } + } + } finally { + downloader.stop(); + } + + return null; + } + public static String resolveCamelVersionFromQuarkus(String repos, String camelQuarkusVersion) throws Exception { DependencyDownloaderClassLoader cl = new DependencyDownloaderClassLoader(CatalogLoader.class.getClassLoader()); MavenDependencyDownloader downloader = new MavenDependencyDownloader(); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeInformation.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeInformation.java deleted file mode 100644 index 078dc5bb57d..00000000000 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/common/RuntimeInformation.java +++ /dev/null @@ -1,81 +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.dsl.jbang.core.common; - -import static org.apache.camel.dsl.jbang.core.common.CatalogLoader.QUARKUS_GROUP_ID; - -public class RuntimeInformation { - private RuntimeType type; - private String camelVersion; - private String camelQuarkusVersion; - private String springBootVersion; - - private String quarkusVersion; - private String quarkusGroupId; - - public RuntimeInformation() { - this.quarkusGroupId = QUARKUS_GROUP_ID; - } - - public RuntimeType getType() { - return type; - } - - public void setType(RuntimeType type) { - this.type = type; - } - - public String getCamelVersion() { - return camelVersion; - } - - public void setCamelVersion(String camelVersion) { - this.camelVersion = camelVersion; - } - - public String getCamelQuarkusVersion() { - return camelQuarkusVersion; - } - - public void setCamelQuarkusVersion(String camelQuarkusVersion) { - this.camelQuarkusVersion = camelQuarkusVersion; - } - - public String getSpringBootVersion() { - return springBootVersion; - } - - public void setSpringBootVersion(String springBootVersion) { - this.springBootVersion = springBootVersion; - } - - public String getQuarkusVersion() { - return quarkusVersion; - } - - public void setQuarkusVersion(String quarkusVersion) { - this.quarkusVersion = quarkusVersion; - } - - public String getQuarkusGroupId() { - return quarkusGroupId; - } - - public void setQuarkusGroupId(String quarkusGroupId) { - this.quarkusGroupId = quarkusGroupId; - } -} diff --git a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyRuntimeTest.java b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyRuntimeTest.java index 515aa4d2f43..e7997bbb81a 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyRuntimeTest.java +++ b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/DependencyRuntimeTest.java @@ -40,12 +40,16 @@ class DependencyRuntimeTest extends CamelCommandBaseTest { Path pomFilePath; private static Stream<Arguments> testOutputArguments() { - return Stream.of(Arguments.of(TestArguments.QUARKUS_POM, TestArguments.QUARKUS_POM_OUTPUT), + return Stream.of( + Arguments.of(TestArguments.MAIN_POM, TestArguments.MAIN_POM_OUTPUT), + Arguments.of(TestArguments.QUARKUS_POM, TestArguments.QUARKUS_POM_OUTPUT), Arguments.of(TestArguments.SPRING_BOOT_POM, TestArguments.SPRING_BOOT_POM_OUTPUT)); } private static Stream<Arguments> testJsonOutputArguments() { - return Stream.of(Arguments.of(TestArguments.QUARKUS_POM, TestArguments.QUARKUS_POM_JSON_OUTPUT), + return Stream.of( + Arguments.of(TestArguments.MAIN_POM, TestArguments.MAIN_POM_JSON_OUTPUT), + Arguments.of(TestArguments.QUARKUS_POM, TestArguments.QUARKUS_POM_JSON_OUTPUT), Arguments.of(TestArguments.SPRING_BOOT_POM, TestArguments.SPRING_BOOT_POM_JSON_OUTPUT)); } @@ -105,20 +109,28 @@ class DependencyRuntimeTest extends CamelCommandBaseTest { private static class TestArguments { static final String QUARKUS_POM = "pom-xml-files/quarkus-pom.xml"; static final String QUARKUS_POM_OUTPUT = """ - Runtime: quarkus + Runtime: camel-quarkus Camel Version: 4.11.0 Camel Quarkus Version: 3.23.0 Quarkus Version: 3.23.0"""; static final String QUARKUS_POM_JSON_OUTPUT - = "{\"type\":\"quarkus\",\"camelVersion\":\"4.11.0\",\"camelQuarkusVersion\":\"3.23.0\",\"quarkusVersion\":\"3.23.0\",\"quarkusGroupId\":\"io.quarkus.platform\"}"; + = "{\"runtime\":\"camel-quarkus\",\"camelVersion\":\"4.11.0\",\"camelQuarkusVersion\":\"3.23.0\",\"quarkusVersion\":\"3.23.0\",\"quarkusGroupId\":\"io.quarkus.platform\"}"; static final String SPRING_BOOT_POM = "pom-xml-files/springboot-pom.xml"; static final String SPRING_BOOT_POM_OUTPUT = """ - Runtime: springBoot + Runtime: camel-spring-boot Camel Version: 4.12.0 + Camel Spring Boot Version: 4.12.0 Spring Boot Version: 3.4.5"""; static final String SPRING_BOOT_POM_JSON_OUTPUT - = "{\"type\":\"springBoot\",\"camelVersion\":\"4.12.0\",\"springBootVersion\":\"3.4.5\",\"quarkusGroupId\":\"io.quarkus.platform\"}"; + = "{\"runtime\":\"camel-spring-boot\",\"camelVersion\":\"4.12.0\",\"camelSpringBootVersion\":\"4.12.0\",\"springBootVersion\":\"3.4.5\"}"; + + static final String MAIN_POM = "pom-xml-files/main-pom.xml"; + static final String MAIN_POM_OUTPUT = """ + Runtime: camel-main + Camel Version: 4.12.0"""; + static final String MAIN_POM_JSON_OUTPUT + = "{\"runtime\":\"camel-main\",\"camelVersion\":\"4.12.0\"}"; } } diff --git a/dsl/camel-jbang/camel-jbang-core/src/test/resources/pom-xml-files/main-pom.xml b/dsl/camel-jbang/camel-jbang-core/src/test/resources/pom-xml-files/main-pom.xml new file mode 100644 index 00000000000..ed36c3e007c --- /dev/null +++ b/dsl/camel-jbang/camel-jbang-core/src/test/resources/pom-xml-files/main-pom.xml @@ -0,0 +1,145 @@ +<?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. + +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.camel.example</groupId> + <artifactId>camel-examples</artifactId> + <version>4.12.0</version> + </parent> + + <artifactId>camel-example-main</artifactId> + <packaging>jar</packaging> + <name>Camel :: Example :: Main</name> + <description>An example for showing standalone Camel</description> + + <properties> + <category>Camel Standalone</category> + </properties> + + <dependencyManagement> + <dependencies> + <!-- Add Camel BOM --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-bom</artifactId> + <version>4.12.0</version> + <type>pom</type> + <scope>import</scope> + </dependency> + </dependencies> + </dependencyManagement> + + <dependencies> + + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-core</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-main</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-timer</artifactId> + </dependency> + + <!-- camel-main web console --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-platform-http-main</artifactId> + </dependency> + <!-- developer consoles for web console --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-console</artifactId> + </dependency> + <!-- JMX metrics for web console --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-management</artifactId> + </dependency> + <!-- jolokia http plugin --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-platform-http-jolokia</artifactId> + </dependency> + + <!-- camel-cli --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-cli-connector</artifactId> + </dependency> + + <!-- logging --> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-core</artifactId> + <version>${log4j2-version}</version> + <scope>runtime</scope> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-slf4j2-impl</artifactId> + <version>${log4j2-version}</version> + <scope>runtime</scope> + </dependency> + <!-- for testing --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-test-main-junit5</artifactId> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.camel</groupId> + <artifactId>camel-maven-plugin</artifactId> + <version>${camel.version}</version> + <configuration> + <logClasspath>false</logClasspath> + <mainClass>org.apache.camel.example.MyApplication</mainClass> + </configuration> + </plugin> + </plugins> + </build> + <profiles> + <profile> + <id>camel.debug</id> + <activation> + <property> + <name>camel.debug</name> + <value>true</value> + </property> + </activation> + <dependencies> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-debug</artifactId> + </dependency> + </dependencies> + </profile> + </profiles> +</project>