This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch jt in repository https://gitbox.apache.org/repos/asf/camel.git
commit 085cb9ca85d626bf9ea4dd21685ffff4e895e7f8 Author: Claus Ibsen <[email protected]> AuthorDate: Thu Aug 14 09:23:42 2025 +0200 CAMEL-22205: camel-jbang: Document all camel.jbang options for tooling --- .../jbang/camel-jbang-configuration-metadata.json | 58 ++++++++++++++++++++++ .../org/apache/camel/catalog/CamelCatalog.java | 7 +++ .../apache/camel/catalog/DefaultCamelCatalog.java | 6 +++ .../org/apache/camel/catalog/CamelCatalogTest.java | 6 +++ .../camel/maven/packaging/PrepareCatalogMojo.java | 18 +++++++ 5 files changed, 95 insertions(+) diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/jbang/camel-jbang-configuration-metadata.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/jbang/camel-jbang-configuration-metadata.json new file mode 100644 index 00000000000..3548b610312 --- /dev/null +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/jbang/camel-jbang-configuration-metadata.json @@ -0,0 +1,58 @@ +{ + "groups": [ + { "name": "camel.jbang", "description": "Camel JBang configurations" } + ], + "properties": [ + { "name": "camel.jbang.background", "description": "Run in the background", "label": "internal", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }, + { "name": "camel.jbang.backgroundWait", "description": "To wait for run in background to startup successfully, before returning", "label": "internal", "type": "boolean", "javaType": "boolean", "defaultValue": true }, + { "name": "camel.jbang.buildTool", "description": "Build tool to use (Maven or Gradle)", "type": "object", "javaType": "String", "defaultValue": "Maven" }, + { "name": "camel.jbang.camel-version", "description": "The version of Apache Camel to use", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.camelSpringBootVersion", "description": "To use a custom Camel version when running or export to Spring Boot", "label": "spring-boot", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.classpathFiles", "description": "Additional files to add to classpath (Use commas to separate multiple files).", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.compileWorkDir", "description": "Work directory for compiler. Can be used to write compiled classes or other resources.", "label": "advanced", "type": "object", "javaType": "String", "defaultValue": ".camel-jbang\/compile" }, + { "name": "camel.jbang.console", "description": "Developer console at \/q\/dev on local HTTP server (port 8080 by default)", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }, + { "name": "camel.jbang.debug", "description": "Run Camel in debugging mode", "label": "internal", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }, + { "name": "camel.jbang.dependencies", "description": "Additional dependencies (Use commas to separate multiple dependencies).", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.download", "description": "Whether to allow automatic downloading JAR dependencies (over the internet)", "type": "boolean", "javaType": "boolean", "defaultValue": true }, + { "name": "camel.jbang.excludes", "description": "Exclude files by name or pattern (Use commas to separate multiple files)", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.export", "description": "Run Camel in export mode", "label": "internal", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }, + { "name": "camel.jbang.exportDir", "description": "Directory where the project will be exported", "type": "object", "javaType": "String", "defaultValue": "." }, + { "name": "camel.jbang.gav", "description": "Maven coordinate (groupId:artifactId:version)", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.gradleWrapper", "description": "Include Gradle Wrapper files in the exported project", "type": "boolean", "javaType": "boolean", "defaultValue": true }, + { "name": "camel.jbang.groovyFiles", "description": "Additional groovy source files to export to src\/main\/resources\/camel-groovy directory (Use commas to separate multiple files)", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.health", "description": "Health check at \/observe\/health on local HTTP server (port 8080 by default)", "type": "boolean", "javaType": "boolean", "defaultValue": false, "deprecated": true }, + { "name": "camel.jbang.ignoreLoadingError", "description": "Whether to ignore route loading and compilation errors (use this with care!)", "label": "advanced", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }, + { "name": "camel.jbang.javaVersion", "description": "Java version (17 or 21)", "type": "object", "javaType": "String", "defaultValue": "21", "enum": [ "17", "21" ] }, + { "name": "camel.jbang.jfr", "description": "Enables Java Flight Recorder saving recording to disk on exit", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }, + { "name": "camel.jbang.jfr-profile", "description": "Java Flight Recorder profile to use (such as default or profile)", "type": "object", "javaType": "String", "defaultValue": "default" }, + { "name": "camel.jbang.jib-maven-plugin-version", "description": "Version to use for jib-maven-plugin if exporting to camel-main and have Kubernetes enabled (jkube.xxx options)", "label": "kubernetes", "type": "object", "javaType": "String", "defaultValue": "3.4.5" }, + { "name": "camel.jbang.jkube-maven-plugin-version", "description": "Version to use for jkube-maven-plugin if exporting to camel-main and have Kubernetes enabled (jkube.xxx options)", "label": "kubernetes", "type": "object", "javaType": "String", "defaultValue": "1.18.1" }, + { "name": "camel.jbang.jkubeFiles", "description": "Resource YAML fragments for Kubernetes using Eclipse JKube tool (Use commas to separate multiple files).", "label": "kubernetes", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.jvmDebug", "description": "To enable JVM remote debugging on the given port.", "label": "internal", "type": "integer", "javaType": "int", "defaultValue": 4004 }, + { "name": "camel.jbang.kameletsVersion", "description": "Apache Camel Kamelets version. By default the Kamelets are the same version as Camel.", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.lazyBean", "description": "Whether to use lazy bean initialization (can help with complex classloading issues)", "label": "advanced", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }, + { "name": "camel.jbang.localKameletDir", "description": "Local file directory for loading custom Kamelets", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.maven-apache-snapshot-enabled", "description": "Whether downloading JARs from ASF Maven Snapshot repository is enabled", "label": "maven", "type": "boolean", "javaType": "boolean", "defaultValue": true }, + { "name": "camel.jbang.maven-central-enabled", "description": "Whether downloading JARs from Maven Central repository is enabled", "label": "maven", "type": "boolean", "javaType": "boolean", "defaultValue": true }, + { "name": "camel.jbang.maven-settings", "description": "Optional location of Maven settings.xml file to configure servers, repositories, mirrors, and proxies. If set to false, not even the default \/.m2\/settings.xml will be used.", "label": "maven", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.maven-settings-security", "description": "Optional location of Maven settings-security.xml file to decrypt Maven Settings (settings.xml) file", "label": "maven", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.mavenWrapper", "description": "Include Maven Wrapper files in the exported project", "type": "boolean", "javaType": "boolean", "defaultValue": true }, + { "name": "camel.jbang.metrics", "description": "Metrics (Micrometer and Prometheus) at \/observe\/metrics on local HTTP server (port 8080 by default) when running standalone Camel", "type": "boolean", "javaType": "boolean", "defaultValue": false, "deprecated": true }, + { "name": "camel.jbang.openApi", "description": "File name of open-api spec file (JSON or YAML) to generate routes from the swagger\/openapi API spec file.", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.packageScanJars", "description": "Whether to automatic package scan JARs for custom Spring or Quarkus beans making them available for Camel JBang", "label": "advanced", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }, + { "name": "camel.jbang.prompt", "description": "Allow user to type in required parameters in prompt if not present in application", "label": "advanced", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }, + { "name": "camel.jbang.quarkusArtifactId", "description": "Quarkus Platform Maven artifactId", "label": "quarkus", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.quarkusGroupId", "description": "Quarkus Platform Maven groupId", "label": "quarkus", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.quarkusVersion", "description": "Quarkus Platform version", "label": "quarkus", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.repos", "description": "Additional Maven repositories for download on-demand (Use commas to separate multiple repositories)", "label": "maven", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.repositories", "description": "Additional Maven repositories (Use commas to separate multiple repositories).", "label": "maven", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.runtime", "description": "Which runtime to use (camel-main, spring-boot, quarkus)", "type": "object", "javaType": "String", "enum": [ "camel-main", "spring-boot", "quarkus" ] }, + { "name": "camel.jbang.scriptFiles", "description": "Additional shell script files to export to src\/main\/scripts directory", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.sourceDir", "description": "Source directory for dynamically loading Camel file(s) to run. When using this, then files cannot be specified at the same time.", "label": "advanced", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.springBootVersion", "description": "Spring Boot version", "label": "spring-boot", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.stub", "description": "Stubs all the matching endpoint with the given component name or pattern. Multiple names can be separated by comma. (all = everything).", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.tlsFiles", "description": "Additional SSL\/TLS files to export to src\/main\/tls directory", "type": "object", "javaType": "String" }, + { "name": "camel.jbang.transform", "description": "To run in transform mode", "label": "internal", "type": "boolean", "javaType": "boolean", "defaultValue": "false" }, + { "name": "camel.jbang.verbose", "description": "Verbose output of startup activity (dependency resolution and downloading", "type": "boolean", "javaType": "boolean", "defaultValue": "false" } + ] +} diff --git a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java index 21cee685ce0..cf2d2056a42 100644 --- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java +++ b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java @@ -368,6 +368,13 @@ public interface CamelCatalog { */ String mainJsonSchema(); + /** + * Returns the camel-jbang json schema + * + * @return the camel-jbang json schema + */ + String jbangJsonSchema(); + /** * Parses the endpoint uri and constructs a key/value properties of each option * diff --git a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java index b32c80eb9f2..f1216c952d9 100644 --- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java +++ b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java @@ -59,6 +59,7 @@ public class DefaultCamelCatalog extends AbstractCachingCamelCatalog implements private static final String MODELS_CATALOG = "org/apache/camel/catalog/models.properties"; private static final String SCHEMAS_XML = "org/apache/camel/catalog/schemas"; private static final String MAIN_DIR = "org/apache/camel/catalog/main"; + private static final String JBANG_DIR = "org/apache/camel/catalog/jbang"; private static final String BASE_RESOURCE_DIR = "org/apache/camel/catalog"; public static final String FIND_COMPONENT_NAMES = "findComponentNames"; @@ -472,6 +473,11 @@ public class DefaultCamelCatalog extends AbstractCachingCamelCatalog implements return cache(MAIN_DIR + "/camel-main-configuration-metadata.json", this::loadResource); } + @Override + public String jbangJsonSchema() { + return cache(JBANG_DIR + "/camel-jbang-configuration-metadata.json", this::loadResource); + } + @Override public String listComponentsAsJson() { return cache(LIST_COMPONENTS_AS_JSON, () -> JsonMapper.serialize(findComponentNames().stream() diff --git a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java index 68ebdad6a82..8a6f1e0bcf8 100644 --- a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java +++ b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java @@ -214,6 +214,12 @@ public class CamelCatalogTest { assertNotNull(schema); } + @Test + public void testJBang() { + String schema = catalog.jbangJsonSchema(); + assertNotNull(schema); + } + @Test public void testAsEndpointUriMapFile() throws Exception { Map<String, String> map = new HashMap<>(); diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java index fcba61832e1..eb0908b6551 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java @@ -162,6 +162,12 @@ public class PrepareCatalogMojo extends AbstractMojo { @Parameter(defaultValue = "${project.basedir}/src/generated/resources/org/apache/camel/catalog/main") protected File mainOutDir; + /** + * The output directory for generated jbang + */ + @Parameter(defaultValue = "${project.basedir}/src/generated/resources/org/apache/camel/catalog/jbang") + protected File jbangOutDir; + /** * The components directory where all the Apache Camel components are */ @@ -216,6 +222,12 @@ public class PrepareCatalogMojo extends AbstractMojo { @Parameter(defaultValue = "${project.basedir}/../../core/camel-main/target/classes/META-INF") protected File mainDir; + /** + * The directory where the camel-jbang metadata are + */ + @Parameter(defaultValue = "${project.basedir}/../../dsl/camel-jbang/camel-jbang-core/target/classes/META-INF") + protected File jbangDir; + /** * Skip the execution of this mojo */ @@ -397,6 +409,7 @@ public class PrepareCatalogMojo extends AbstractMojo { executeDocuments(components, dataformats, languages, others); executeXmlSchemas(); executeMain(); + executeJBang(); } catch (Exception e) { throw new MojoFailureException("Error preparing catalog", e); } @@ -997,6 +1010,11 @@ public class PrepareCatalogMojo extends AbstractMojo { copyFile(mainDir.toPath().resolve("camel-main-configuration-metadata.json"), mainOutDir.toPath()); } + protected void executeJBang() throws Exception { + getLog().info("Copying camel-jbang metadata"); + copyFile(jbangDir.toPath().resolve("camel-jbang-configuration-metadata.json"), jbangOutDir.toPath()); + } + protected void executeDocuments( Set<String> components, Set<String> dataformats, Set<String> languages, Set<String> others) { // lets use sorted set/maps
