This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch export in repository https://gitbox.apache.org/repos/asf/camel.git
commit 3dc2228178f2c094e49d16e6b66bbae31f9fff73 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Thu Aug 3 14:30:39 2023 +0200 CAMEL-19694: camel-jbang - Export can now configure java package name to use for source code --- .../camel/dsl/jbang/core/commands/Export.java | 1 + .../dsl/jbang/core/commands/ExportBaseCommand.java | 22 +++++++++++-- .../dsl/jbang/core/commands/ExportCamelMain.java | 36 ++++++++++++++++------ .../dsl/jbang/core/commands/ExportQuarkus.java | 13 +++++--- .../dsl/jbang/core/commands/ExportSpringBoot.java | 15 ++++++--- .../src/main/resources/templates/main.tmpl | 2 +- 6 files changed, 66 insertions(+), 23 deletions(-) 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 aaeaca73e42..830e36a0b07 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 @@ -120,6 +120,7 @@ public class Export extends ExportBaseCommand { cmd.secretsRefresh = this.secretsRefresh; cmd.secretsRefreshProviders = this.secretsRefreshProviders; cmd.openapi = this.openapi; + cmd.packageName = this.packageName; // 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 543c47e7d35..bd7df4db115 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 @@ -158,6 +158,12 @@ abstract class ExportBaseCommand extends CamelCommand { @CommandLine.Option(names = { "--logging-level" }, defaultValue = "info", description = "Logging level") protected String loggingLevel; + @CommandLine.Option(names = { "--package-name" }, + description = "For Java source files should they have the given package name. By default the package name is computed from the Maven GAV. " + + + "Use false to turn off and not include package name in the Java source files.") + protected String packageName; + @CommandLine.Option(names = { "--fresh" }, description = "Make sure we use fresh (i.e. non-cached) resources") protected boolean fresh; @@ -443,8 +449,10 @@ abstract class ExportBaseCommand extends CamelCommand { } } else { fos = new FileOutputStream(out); - lines.add(0, ""); - lines.add(0, "package " + packageName + ";"); + if (packageName != null && !"false".equalsIgnoreCase(packageName)) { + lines.add(0, ""); + lines.add(0, "package " + packageName + ";"); + } } for (String line : lines) { adjustJavaSourceFileLine(line, fos); @@ -462,7 +470,15 @@ abstract class ExportBaseCommand extends CamelCommand { // noop } - protected String exportPackageName(String groupId, String artifactId) { + 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(); 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 54cc96a053e..9c5d9df7e6d 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 @@ -82,10 +82,15 @@ class ExportCamelMain extends Export { FileUtil.removeDir(buildDir); buildDir.mkdirs(); - // copy source files - String packageName = exportPackageName(ids[0], ids[1]); + // compute source folders File srcJavaDirRoot = new File(BUILD_DIR, "src/main/java"); - File srcJavaDir = new File(srcJavaDirRoot, packageName.replace('.', File.separatorChar)); + String srcPackageName = exportPackageName(ids[0], ids[1], packageName); + File srcJavaDir; + if (srcPackageName == null) { + srcJavaDir = srcJavaDirRoot; + } else { + srcJavaDir = new File(srcJavaDirRoot, srcPackageName.replace('.', File.separatorChar)); + } srcJavaDir.mkdirs(); File srcResourcesDir = new File(BUILD_DIR, "src/main/resources"); srcResourcesDir.mkdirs(); @@ -93,12 +98,15 @@ class ExportCamelMain extends Export { srcCamelResourcesDir.mkdirs(); File srcKameletsResourcesDir = new File(BUILD_DIR, "src/main/resources/kamelets"); srcKameletsResourcesDir.mkdirs(); + // copy source files copySourceFiles(settings, profile, srcJavaDirRoot, srcJavaDir, srcResourcesDir, srcCamelResourcesDir, - srcKameletsResourcesDir, packageName); + srcKameletsResourcesDir, srcPackageName); // copy from settings to profile copySettingsAndProfile(settings, profile, srcResourcesDir, prop -> { - if (!prop.containsKey("camel.main.basePackageScan") && !prop.containsKey("camel.main.base-package-scan")) { - prop.put("camel.main.basePackageScan", packageName); + if (!prop.containsKey("camel.main.basePackageScan") + && !prop.containsKey("camel.main.base-package-scan")) { + // use dot as root package if no package are in use + prop.put("camel.main.basePackageScan", srcPackageName == null ? "." : srcPackageName); } if (!hasModeline(settings)) { prop.remove("camel.main.modeline"); @@ -117,13 +125,13 @@ class ExportCamelMain extends Export { return prop; }); // create main class - createMainClassSource(srcJavaDir, packageName, mainClassname); + createMainClassSource(srcJavaDir, srcPackageName, mainClassname); // gather dependencies Set<String> deps = resolveDependencies(settings, profile); // copy local lib JARs copyLocalLibDependencies(deps); if ("maven".equals(buildTool)) { - createMavenPom(settings, profile, new File(BUILD_DIR, "pom.xml"), deps, packageName); + createMavenPom(settings, profile, new File(BUILD_DIR, "pom.xml"), deps, srcPackageName); if (mavenWrapper) { copyMavenWrapper(); } @@ -156,7 +164,11 @@ class ExportCamelMain extends Export { context = context.replaceFirst("\\{\\{ \\.Version }}", ids[2]); context = context.replaceFirst("\\{\\{ \\.JavaVersion }}", javaVersion); context = context.replaceAll("\\{\\{ \\.CamelVersion }}", camelVersion); - context = context.replaceAll("\\{\\{ \\.MainClassname }}", packageName + "." + mainClassname); + if (packageName != null) { + context = context.replaceAll("\\{\\{ \\.MainClassname }}", packageName + "." + mainClassname); + } else { + context = context.replaceAll("\\{\\{ \\.MainClassname }}", mainClassname); + } Properties prop = new CamelCaseOrderedProperties(); RuntimeUtil.loadProperties(prop, settings); @@ -307,7 +319,11 @@ class ExportCamelMain extends Export { String context = IOHelper.loadText(is); IOHelper.close(is); - context = context.replaceFirst("\\{\\{ \\.PackageName }}", packageName); + if (packageName != null) { + context = context.replaceFirst("\\{\\{ \\.PackageName }}", "package " + packageName + ";"); + } else { + context = context.replaceFirst("\\{\\{ \\.PackageName }}", ""); + } context = context.replaceAll("\\{\\{ \\.MainClassname }}", mainClassname); IOHelper.writeText(context, new FileOutputStream(srcJavaDir + "/" + mainClassname + ".java", false)); } 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 aa7cc6bce78..c525ff3a1a2 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 @@ -85,10 +85,14 @@ class ExportQuarkus extends Export { FileUtil.removeDir(buildDir); buildDir.mkdirs(); - // copy source files - String packageName = exportPackageName(ids[0], ids[1]); File srcJavaDirRoot = new File(BUILD_DIR, "src/main/java"); - File srcJavaDir = new File(srcJavaDirRoot, packageName.replace('.', File.separatorChar)); + String srcPackageName = exportPackageName(ids[0], ids[1], packageName); + File srcJavaDir; + if (srcPackageName == null) { + srcJavaDir = srcJavaDirRoot; + } else { + srcJavaDir = new File(srcJavaDirRoot, srcPackageName.replace('.', File.separatorChar)); + } srcJavaDir.mkdirs(); File srcResourcesDir = new File(BUILD_DIR, "src/main/resources"); srcResourcesDir.mkdirs(); @@ -96,8 +100,9 @@ class ExportQuarkus extends Export { srcCamelResourcesDir.mkdirs(); File srcKameletsResourcesDir = new File(BUILD_DIR, "src/main/resources/kamelets"); srcKameletsResourcesDir.mkdirs(); + // copy source files copySourceFiles(settings, profile, srcJavaDirRoot, srcJavaDir, srcResourcesDir, srcCamelResourcesDir, - srcKameletsResourcesDir, packageName); + srcKameletsResourcesDir, srcPackageName); // copy from settings to profile copySettingsAndProfile(settings, profile, srcResourcesDir, prop -> { if (!hasModeline(settings)) { 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 e393f3ef0ea..5c9e5103e7a 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 @@ -86,10 +86,14 @@ class ExportSpringBoot extends Export { FileUtil.removeDir(buildDir); buildDir.mkdirs(); - // copy source files - String packageName = exportPackageName(ids[0], ids[1]); File srcJavaDirRoot = new File(BUILD_DIR, "src/main/java"); - File srcJavaDir = new File(srcJavaDirRoot, packageName.replace('.', File.separatorChar)); + String srcPackageName = exportPackageName(ids[0], ids[1], packageName); + File srcJavaDir; + if (srcPackageName == null) { + srcJavaDir = srcJavaDirRoot; + } else { + srcJavaDir = new File(srcJavaDirRoot, srcPackageName.replace('.', File.separatorChar)); + } srcJavaDir.mkdirs(); File srcResourcesDir = new File(BUILD_DIR, "src/main/resources"); srcResourcesDir.mkdirs(); @@ -97,8 +101,9 @@ class ExportSpringBoot extends Export { srcCamelResourcesDir.mkdirs(); File srcKameletsResourcesDir = new File(BUILD_DIR, "src/main/resources/kamelets"); srcKameletsResourcesDir.mkdirs(); + // copy source files copySourceFiles(settings, profile, srcJavaDirRoot, srcJavaDir, srcResourcesDir, srcCamelResourcesDir, - srcKameletsResourcesDir, packageName); + srcKameletsResourcesDir, srcPackageName); // copy from settings to profile copySettingsAndProfile(settings, profile, srcResourcesDir, prop -> { if (!hasModeline(settings)) { @@ -107,7 +112,7 @@ class ExportSpringBoot extends Export { return prop; }); // create main class - createMainClassSource(srcJavaDir, packageName, mainClassname); + createMainClassSource(srcJavaDir, srcPackageName, mainClassname); // gather dependencies Set<String> deps = resolveDependencies(settings, profile); // copy local lib JARs diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/main.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/main.tmpl index bf0bf30cd3c..52e141843ca 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/main.tmpl +++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/main.tmpl @@ -1,4 +1,4 @@ -package {{ .PackageName }}; +{{ .PackageName }} import org.apache.camel.main.Main;