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>
