This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch haw
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 8bd1d44fbc21d24410e01a9e12f84664250dcffc
Author: Claus Ibsen <[email protected]>
AuthorDate: Tue Dec 23 10:57:38 2025 +0100

    CAMEL-22272: camel-jbang - Make it easier to export and have hawtio ready 
to use
---
 .../camel/dsl/jbang/core/common/HawtioVersion.java | 23 ++++++++++
 .../camel/dsl/jbang/core/commands/Export.java      |  2 +
 .../dsl/jbang/core/commands/ExportBaseCommand.java |  9 ++++
 .../dsl/jbang/core/commands/ExportQuarkus.java     |  8 ++++
 .../dsl/jbang/core/commands/ExportSpringBoot.java  | 16 +++++++
 .../dsl/jbang/core/commands/process/Hawtio.java    |  5 ++-
 .../camel/dsl/jbang/core/commands/ExportTest.java  | 49 ++++++++++++++++++++++
 parent/pom.xml                                     |  1 +
 8 files changed, 111 insertions(+), 2 deletions(-)

diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java-templates/org/apache/camel/dsl/jbang/core/common/HawtioVersion.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java-templates/org/apache/camel/dsl/jbang/core/common/HawtioVersion.java
new file mode 100644
index 000000000000..194c85babb25
--- /dev/null
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java-templates/org/apache/camel/dsl/jbang/core/common/HawtioVersion.java
@@ -0,0 +1,23 @@
+/*
+ * 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;
+
+public final class HawtioVersion {
+
+    public static final String HAWTIO_VERSION = "${hawtio-version}";
+
+}
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java
index 3f0296a3a72d..8f6e5a735374 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java
@@ -261,6 +261,8 @@ public class Export extends ExportBaseCommand {
         cmd.verbose = this.verbose;
         cmd.applicationProperties = this.applicationProperties;
         cmd.groovyPrecompiled = this.groovyPrecompiled;
+        cmd.hawtio = this.hawtio;
+        cmd.hawtioVersion = this.hawtioVersion;
         // run export
         return cmd.export();
     }
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 d8d0e5728c4e..c0ba40dd90a1 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
@@ -50,6 +50,7 @@ import java.util.stream.Stream;
 import org.apache.camel.catalog.DefaultCamelCatalog;
 import org.apache.camel.dsl.jbang.core.commands.catalog.KameletCatalogHelper;
 import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
+import org.apache.camel.dsl.jbang.core.common.HawtioVersion;
 import org.apache.camel.dsl.jbang.core.common.Plugin;
 import org.apache.camel.dsl.jbang.core.common.PluginExporter;
 import org.apache.camel.dsl.jbang.core.common.PluginHelper;
@@ -282,6 +283,14 @@ public abstract class ExportBaseCommand extends 
CamelCommand {
                         description = "Whether to include pre-compiled Groovy 
classes in the export (only supported with runtime=camel-main)")
     protected boolean groovyPrecompiled;
 
+    @CommandLine.Option(names = { "--hawtio" }, defaultValue = "false",
+                        description = "Whether to include Hawtio web console 
(only available for exporting to Spring Boot or Quarkus)")
+    protected boolean hawtio;
+
+    @CommandLine.Option(names = { "--hawtio-version" },
+                        description = "Version of the Hawtio web console", 
defaultValue = HawtioVersion.HAWTIO_VERSION)
+    protected String hawtioVersion;
+
     protected boolean symbolicLink;     // copy source files using symbolic 
link
     protected boolean javaLiveReload; // reload java codes in dev
     public String pomTemplateName;   // support for specialised pom templates
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
index e9bc0d5cc277..e24f7f17fa83 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
@@ -126,6 +126,9 @@ class ExportQuarkus extends Export {
                     prop.put("quarkus.management.port", port);
                 }
             }
+            if (hawtio) {
+                prop.setProperty("quarkus.hawtio.authenticationEnabled", 
"false");
+            }
             return prop;
         });
         // copy docker files
@@ -539,6 +542,11 @@ class ExportQuarkus extends Export {
         answer.removeIf(s -> s.contains("camel-core"));
         answer.removeIf(s -> s.contains("camel-microprofile-health"));
 
+        if (hawtio) {
+            answer.add("mvn:org.apache.camel:camel-management");
+            answer.add("mvn:io.hawt:hawtio-quarkus:" + hawtioVersion);
+        }
+
         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 cb5fdcd10f93..1455bb29e995 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
@@ -139,6 +139,18 @@ class ExportSpringBoot extends Export {
                     prop.put("management.server.port", port);
                 }
             }
+            if (hawtio) {
+                // spring boot needs these options configured to support hawtio
+                String s = 
prop.getProperty("management.endpoints.web.exposure.include");
+                if (s == null) {
+                    s = "hawtio,jolokia";
+                } else {
+                    s = s + ",hawtio,jolokia";
+                }
+                prop.setProperty("management.endpoints.web.exposure.include", 
s);
+                prop.setProperty("spring.jmx.enabled", "true");
+                prop.setProperty("hawtio.authenticationEnabled", "false");
+            }
             return prop;
         });
         if ("maven".equals(buildTool)) {
@@ -375,6 +387,10 @@ class ExportSpringBoot extends Export {
             // include http server if using openapi
             answer.add("mvn:org.apache.camel:camel-platform-http");
         }
+        if (hawtio) {
+            answer.add("mvn:org.apache.camel:camel-management");
+            answer.add("mvn:io.hawt:hawtio-springboot:" + hawtioVersion);
+        }
 
         return answer;
     }
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/Hawtio.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/Hawtio.java
index 308f517db6c7..0502e5a2ef7b 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/Hawtio.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/Hawtio.java
@@ -23,6 +23,7 @@ import java.util.concurrent.CountDownLatch;
 
 import org.apache.camel.dsl.jbang.core.commands.CamelCommand;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
+import org.apache.camel.dsl.jbang.core.common.HawtioVersion;
 import org.apache.camel.main.download.DependencyDownloaderClassLoader;
 import org.apache.camel.main.download.MavenDependencyDownloader;
 import org.apache.camel.support.ObjectHelper;
@@ -37,8 +38,8 @@ public class Hawtio extends CamelCommand {
     String name;
 
     @CommandLine.Option(names = { "--version" },
-                        description = "Version of the Hawtio web console", 
defaultValue = "4.6.2")
-    String version = "4.6.2";
+                        description = "Version of the Hawtio web console", 
defaultValue = HawtioVersion.HAWTIO_VERSION)
+    String version = HawtioVersion.HAWTIO_VERSION;
 
     // use port 8888 as 8080 is too commonly used
     @CommandLine.Option(names = { "--port" },
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
index 4d7bbf9c4174..675edf3a22a3 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java
@@ -30,6 +30,7 @@ import java.util.Scanner;
 import java.util.stream.Stream;
 
 import org.apache.camel.dsl.jbang.core.common.CamelJBangConstants;
+import org.apache.camel.dsl.jbang.core.common.HawtioVersion;
 import org.apache.camel.dsl.jbang.core.common.RuntimeType;
 import org.apache.camel.util.IOHelper;
 import org.apache.maven.model.Dependency;
@@ -797,4 +798,52 @@ class ExportTest {
         
assertThat(model.getProperties()).containsEntry("quarkus.platform.version",
                 System.getProperty(CamelJBangConstants.QUARKUS_VERSION));
     }
+
+    @ParameterizedTest
+    @MethodSource("runtimeProvider")
+    public void shouldExportHawtio(RuntimeType rt) throws Exception {
+        LOG.info("shouldExportHawtio {}", rt);
+        Export command = new Export(new CamelJBangMain());
+        CommandLine.populateCommand(command, "--gav=examples:route:1.0.0", 
"--dir=" + workingDir,
+                "--runtime=%s".formatted(rt.runtime()), "--hawtio=true", 
"target/test-classes/route.yaml");
+        int exit = command.doCall();
+
+        Assertions.assertEquals(0, exit);
+        Model model = readMavenModel();
+        Assertions.assertEquals("examples", model.getGroupId());
+        Assertions.assertEquals("route", model.getArtifactId());
+        Assertions.assertEquals("1.0.0", model.getVersion());
+
+        if (rt == RuntimeType.main) {
+            // hawtio not supported
+        } else if (rt == RuntimeType.springBoot) {
+            Assertions.assertTrue(
+                    containsDependency(model.getDependencies(), 
"org.apache.camel.springboot", "camel-management-starter",
+                            null));
+            Assertions.assertTrue(
+                    containsDependency(model.getDependencies(), "io.hawt",
+                            "hawtio-springboot", 
HawtioVersion.HAWTIO_VERSION));
+            // Application properties
+            File appProperties = new File(workingDir + "/src/main/resources", 
"application.properties");
+            String content = IOHelper.loadText(new 
FileInputStream(appProperties));
+            
Assertions.assertTrue(content.contains("management.endpoints.web.exposure.include=hawtio,jolokia"),
+                    "should contain management.endpoints.web.exposure.include 
property, was " + content);
+            Assertions.assertTrue(content.contains("spring.jmx.enabled=true"),
+                    "should contain spring.jmx.enabled property, was " + 
content);
+            
Assertions.assertTrue(content.contains("hawtio.authenticationEnabled=false"),
+                    "should contain hawtio.authenticationEnabled property, was 
" + content);
+        } else if (rt == RuntimeType.quarkus) {
+            Assertions.assertTrue(
+                    containsDependency(model.getDependencies(), 
"org.apache.camel.quarkus", "camel-quarkus-management", null));
+            Assertions.assertTrue(
+                    containsDependency(model.getDependencies(), "io.hawt",
+                            "hawtio-quarkus", HawtioVersion.HAWTIO_VERSION));
+            // Application properties
+            File appProperties = new File(workingDir + "/src/main/resources", 
"application.properties");
+            String content = IOHelper.loadText(new 
FileInputStream(appProperties));
+            
Assertions.assertTrue(content.contains("quarkus.hawtio.authenticationEnabled=false"),
+                    "should contain quarkus.hawtio.authenticationEnabled 
property, was " + content);
+        }
+    }
+
 }
diff --git a/parent/pom.xml b/parent/pom.xml
index bf713483504a..dfd4138ba96f 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -234,6 +234,7 @@
         <hapi-version>2.6.0</hapi-version>
         <hapi-base-version>2.6.0</hapi-base-version>
         <hapi-fhir-version>8.6.1</hapi-fhir-version>
+        <hawtio-version>4.6.2</hawtio-version>
         <hazelcast-version>5.4.0</hazelcast-version>
         <hdrhistrogram-version>2.2.2</hdrhistrogram-version>
         <hibernate-validator-version>9.1.0.Final</hibernate-validator-version>

Reply via email to