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

Reply via email to