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 9382be5c57e CAMEL-22342: camel-jbang - Export using Maven GAV that has number can cause java compilation error 9382be5c57e is described below commit 9382be5c57e00d85fea449f5c6abc8e7e23d6d01 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Wed Aug 13 14:22:34 2025 +0200 CAMEL-22342: camel-jbang - Export using Maven GAV that has number can cause java compilation error --- .../dsl/jbang/core/commands/ExportBaseCommand.java | 21 --------------- .../dsl/jbang/core/commands/ExportCamelMain.java | 2 ++ .../dsl/jbang/core/commands/ExportHelper.java | 22 +++++++++++++++ .../dsl/jbang/core/commands/ExportQuarkus.java | 2 ++ .../dsl/jbang/core/commands/ExportSpringBoot.java | 2 ++ .../dsl/jbang/core/commands/ExportHelperTest.java | 31 ++++++++++++++++++++++ .../java/org/apache/camel/main/KameletMain.java | 3 +-- .../main/download/PackageNameSourceLoader.java | 18 +++++++++++-- 8 files changed, 76 insertions(+), 25 deletions(-) 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 190447f657d..f8afb46c95b 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 @@ -773,27 +773,6 @@ public abstract class ExportBaseCommand extends CamelCommand { // noop } - protected String exportPackageName(String groupId, String artifactId, String packageName) { - if ("false".equalsIgnoreCase(packageName)) { - return null; // package names are turned off (we should use root package) - } - if (packageName != null) { - return packageName; // use specific package name - } - - // compute package name based on Maven GAV - // for package name it must be in lower-case and alpha/numeric - String s = groupId + "." + artifactId; - StringBuilder sb = new StringBuilder(); - for (char ch : s.toCharArray()) { - if (ch == '.' || Character.isAlphabetic(ch) || Character.isDigit(ch)) { - ch = Character.toLowerCase(ch); - sb.append(ch); - } - } - return sb.toString(); - } - protected void copySettingsAndProfile( Path settings, Path profile, Path targetDir, Function<Properties, Object> customize) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java index aef37eb4085..510f340b121 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportCamelMain.java @@ -37,6 +37,8 @@ import org.apache.camel.util.CamelCaseOrderedProperties; import org.apache.camel.util.IOHelper; import org.apache.camel.util.ObjectHelper; +import static org.apache.camel.dsl.jbang.core.commands.ExportHelper.exportPackageName; + class ExportCamelMain extends Export { protected static final String GROOVY_COMPILE_DIR = CommandLineHelper.CAMEL_JBANG_WORK_DIR + "/compile/groovy"; diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportHelper.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportHelper.java index 5383d94274e..b1b9c4d4861 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportHelper.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportHelper.java @@ -114,4 +114,26 @@ public final class ExportHelper { Files.copy(source, target); } } + + public static String exportPackageName(String groupId, String artifactId, String packageName) { + if ("false".equalsIgnoreCase(packageName)) { + return null; // package names are turned off (we should use root package) + } + if (packageName != null) { + return packageName; // use specific package name + } + + // compute package name based on Maven GAV + // for package name it must be in lower-case and alpha/numeric + String s = groupId + "." + artifactId; + StringBuilder sb = new StringBuilder(); + for (char ch : s.toCharArray()) { + if (ch == '.' || Character.isAlphabetic(ch) || Character.isDigit(ch)) { + ch = Character.toLowerCase(ch); + sb.append(ch); + } + } + return sb.toString(); + } + } 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 1565b2f5b36..b96dd2b260a 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 @@ -43,6 +43,8 @@ import org.apache.camel.util.FileUtil; import org.apache.camel.util.IOHelper; import org.apache.camel.util.StringHelper; +import static org.apache.camel.dsl.jbang.core.commands.ExportHelper.exportPackageName; + class ExportQuarkus extends Export { public ExportQuarkus(CamelJBangMain main) { 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 a2886873409..ae874ead801 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 @@ -42,6 +42,8 @@ import org.apache.camel.util.CamelCaseOrderedProperties; import org.apache.camel.util.IOHelper; import org.apache.camel.util.ObjectHelper; +import static org.apache.camel.dsl.jbang.core.commands.ExportHelper.exportPackageName; + class ExportSpringBoot extends Export { public ExportSpringBoot(CamelJBangMain main) { diff --git a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportHelperTest.java b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportHelperTest.java new file mode 100644 index 00000000000..d4d821d88bc --- /dev/null +++ b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportHelperTest.java @@ -0,0 +1,31 @@ +/* + * 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.commands; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class ExportHelperTest { + + @Test + public void testPackageName() { + String name = ExportHelper.exportPackageName("org.demo", "some-app-x2025", null); + Assertions.assertEquals("org.demo.someappx2025", name); + name = ExportHelper.exportPackageName("org.demo", "some-app-2025", null); + Assertions.assertEquals("org.demo.someapp2025", name); + } +} diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java index b1a33cf27d2..95a48ebb021 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java @@ -604,8 +604,7 @@ public class KameletMain extends MainCommandLineSupport { MavenGav g = MavenGav.parseGav(gav); if (g.getGroupId() != null && g.getArtifactId() != null) { // plugin a custom source loader with package name based on GAV - String defaultPackageName = g.getGroupId().replace('-', '.') + "." + g.getArtifactId().replace('-', '.'); - SourceLoader sl = new PackageNameSourceLoader(defaultPackageName); + SourceLoader sl = new PackageNameSourceLoader(g.getGroupId(), g.getArtifactId()); answer.getRegistry().bind("PackageNameSourceLoader", sl); } } diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/PackageNameSourceLoader.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/PackageNameSourceLoader.java index 915dd6f9cb8..fc536e05026 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/PackageNameSourceLoader.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/PackageNameSourceLoader.java @@ -34,8 +34,8 @@ public class PackageNameSourceLoader extends DefaultSourceLoader { private final String packageName; - public PackageNameSourceLoader(String packageName) { - this.packageName = packageName; + public PackageNameSourceLoader(String groupId, String artifactId) { + this.packageName = determinePackageName(groupId, artifactId); } @Override @@ -60,4 +60,18 @@ public class PackageNameSourceLoader extends DefaultSourceLoader { return matcher.find() ? matcher.group(1) : null; } + private static String determinePackageName(String groupId, String artifactId) { + // compute package name based on Maven GAV + // for package name it must be in lower-case and alpha/numeric + String s = groupId + "." + artifactId; + StringBuilder sb = new StringBuilder(); + for (char ch : s.toCharArray()) { + if (ch == '.' || Character.isAlphabetic(ch) || Character.isDigit(ch)) { + ch = Character.toLowerCase(ch); + sb.append(ch); + } + } + return sb.toString(); + } + }