You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/08/03 12:52:56 UTC

[camel] 01/04: CAMEL-19694: camel-jbang - Export can now configure java package name to use for source code

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 <cl...@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;