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 a51e6e9f75e2 CAMEL-22272: camel-jbang - Make it easier to export and
have hawtio ready to use (#20586)
a51e6e9f75e2 is described below
commit a51e6e9f75e263618f4bb7ce507203b7d5ff77e4
Author: Claus Ibsen <[email protected]>
AuthorDate: Tue Dec 23 11:23:48 2025 +0100
CAMEL-22272: camel-jbang - Make it easier to export and have hawtio ready
to use (#20586)
---
.../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>