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 74cbdc41529 CAMEL-21510: camel-jbang - Kubernetes plugin support for 
parameter name (#16562)
74cbdc41529 is described below

commit 74cbdc4152944b438474b8a6ff453e145546f972
Author: Thomas Diesler <[email protected]>
AuthorDate: Mon Dec 16 09:20:41 2024 +0100

    CAMEL-21510: camel-jbang - Kubernetes plugin support for parameter name 
(#16562)
---
 .../camel/dsl/jbang/core/commands/Export.java      |  8 +++-
 .../dsl/jbang/core/commands/ExportBaseCommand.java |  4 ++
 .../apache/camel/dsl/jbang/core/commands/Run.java  | 12 +++++-
 .../commands/kubernetes/KubernetesBaseCommand.java | 44 ++++++++++++++++++++++
 .../core/commands/kubernetes/KubernetesDelete.java | 17 +--------
 .../core/commands/kubernetes/KubernetesExport.java |  8 +++-
 .../core/commands/kubernetes/KubernetesHelper.java | 14 ++++---
 .../core/commands/kubernetes/KubernetesPlugin.java |  2 +-
 .../{PodLogs.java => KubernetesPodLogs.java}       | 23 ++---------
 .../core/commands/kubernetes/KubernetesRun.java    | 41 +++++++-------------
 .../commands/kubernetes/KubernetesExportTest.java  | 14 +++++++
 ...PodLogsTest.java => KubernetesPodLogsTest.java} |  8 ++--
 12 files changed, 118 insertions(+), 77 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 10467b43d1e..efbc89f669d 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
@@ -123,6 +123,7 @@ public class Export extends ExportBaseCommand {
         cmd.repositories = this.repositories;
         cmd.dependencies = this.dependencies;
         cmd.runtime = this.runtime;
+        cmd.name = this.name;
         cmd.gav = this.gav;
         cmd.mavenSettings = this.mavenSettings;
         cmd.mavenSettingsSecurity = this.mavenSettingsSecurity;
@@ -160,6 +161,11 @@ public class Export extends ExportBaseCommand {
     }
 
     protected String getProjectName() {
+
+        if (name != null) {
+            return name;
+        }
+
         if (gav != null) {
             String[] ids = gav.split(":");
             if (ids.length > 1) {
@@ -172,7 +178,7 @@ public class Export extends ExportBaseCommand {
         }
 
         throw new RuntimeCamelException(
-                "Failed to resolve project name - please provide --gav option 
or at least one source file");
+                "Failed to resolve project name - please provide --name, --gav 
or source file");
     }
 
     protected String getVersion() {
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 66b74f05034..c15b19bee26 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
@@ -105,6 +105,10 @@ public abstract class ExportBaseCommand extends 
CamelCommand {
                         description = "Runtime (${COMPLETION-CANDIDATES})")
     protected RuntimeType runtime;
 
+    @CommandLine.Option(names = { "--name" },
+                        description = "The integration name. Use this when the 
name should not get derived otherwise.")
+    protected String name;
+
     @CommandLine.Option(names = { "--gav" }, description = "The Maven 
group:artifact:version")
     protected String gav;
 
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
index 81bb64b84fb..b217c97bc02 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Run.java
@@ -932,9 +932,13 @@ public class Run extends CamelCommand {
         eq.excludes = this.excludes;
         eq.filePaths = this.filePaths;
         eq.files = this.files;
+        eq.name = this.name;
         eq.gav = this.gav;
         if (eq.gav == null) {
-            eq.gav = "org.example.project:jbang-run-dummy:1.0-SNAPSHOT";
+            if (eq.name == null) {
+                eq.name = "jbang-run-dummy";
+            }
+            eq.gav = "org.example.project:" + eq.name + ":1.0-SNAPSHOT";
         }
         eq.dependencies = this.dependencies;
         if (!this.exportRun) {
@@ -999,9 +1003,13 @@ public class Run extends CamelCommand {
         eq.excludes = this.excludes;
         eq.filePaths = this.filePaths;
         eq.files = this.files;
+        eq.name = this.name;
         eq.gav = this.gav;
         if (eq.gav == null) {
-            eq.gav = "org.example.project:jbang-run-dummy:1.0-SNAPSHOT";
+            if (eq.name == null) {
+                eq.name = "jbang-run-dummy";
+            }
+            eq.gav = "org.example.project:" + eq.name + ":1.0-SNAPSHOT";
         }
         eq.dependencies.addAll(dependencies);
         if (!this.exportRun) {
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesBaseCommand.java
 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesBaseCommand.java
index fdb0aec1a7a..c77146be48c 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesBaseCommand.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesBaseCommand.java
@@ -17,6 +17,11 @@
 
 package org.apache.camel.dsl.jbang.core.commands.kubernetes;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.function.Supplier;
+
 import io.fabric8.kubernetes.api.model.HasMetadata;
 import io.fabric8.kubernetes.api.model.KubernetesResourceList;
 import io.fabric8.kubernetes.api.model.Pod;
@@ -25,9 +30,13 @@ import io.fabric8.kubernetes.client.KubernetesClient;
 import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
 import io.fabric8.kubernetes.client.dsl.PodResource;
 import io.fabric8.kubernetes.client.dsl.Resource;
+import org.apache.camel.RuntimeCamelException;
 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.SourceScheme;
+import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.StringHelper;
 import picocli.CommandLine;
 
 /**
@@ -45,10 +54,45 @@ public abstract class KubernetesBaseCommand extends 
CamelCommand {
     @CommandLine.Option(names = { "--namespace", "-n" }, description = 
"Namespace to use for all operations")
     String namespace;
 
+    @CommandLine.Option(names = { "--name" },
+                        description = "The integration name. Use this when the 
name should not get derived otherwise.")
+    String name;
+
+    List<Supplier<String>> projectNameSuppliers = new ArrayList<>();
+
     private KubernetesClient kubernetesClient;
 
     public KubernetesBaseCommand(CamelJBangMain main) {
         super(main);
+        projectNameSuppliers.add(() -> name);
+    }
+
+    protected String getProjectName() {
+        return 
projectNameSuppliers.stream().map(Supplier::get).filter(Objects::nonNull).findFirst()
+                .orElseThrow(() -> new RuntimeCamelException("Failed to 
resolve project name"));
+    }
+
+    protected String projectNameFromImage(Supplier<String> imageSupplier) {
+        return 
KubernetesHelper.sanitize(StringHelper.beforeLast(imageSupplier.get(), ":"));
+    }
+
+    protected String projectNameFromGav(Supplier<String> gavSupplier) {
+        var gav = gavSupplier.get();
+        if (gav != null) {
+            String[] ids = gav.split(":");
+            if (ids.length > 1) {
+                return KubernetesHelper.sanitize(ids[1]); // artifactId
+            }
+        }
+        return null;
+    }
+
+    protected String projectNameFromFilePath(Supplier<String> pathSupplier) {
+        var filePath = pathSupplier.get();
+        if (filePath != null) {
+            return 
KubernetesHelper.sanitize(FileUtil.onlyName(SourceScheme.onlyName(filePath)));
+        }
+        return null;
     }
 
     /**
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesDelete.java
 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesDelete.java
index 243b7859882..341643740bc 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesDelete.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesDelete.java
@@ -23,8 +23,6 @@ import java.util.List;
 
 import io.fabric8.kubernetes.api.model.StatusDetails;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
-import org.apache.camel.dsl.jbang.core.common.SourceScheme;
-import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.StringHelper;
 import picocli.CommandLine;
@@ -36,10 +34,6 @@ public class KubernetesDelete extends KubernetesBaseCommand {
                             arity = "0..1", paramLabel = "<file>")
     String filePath;
 
-    @CommandLine.Option(names = { "--name" },
-                        description = "The integration name. Use this when the 
name should not get derived from the source file name.")
-    String name;
-
     @CommandLine.Option(names = { "--working-dir" },
                         description = "The working directory where to find 
exported project sources.")
     String workingDir;
@@ -50,6 +44,7 @@ public class KubernetesDelete extends KubernetesBaseCommand {
 
     public KubernetesDelete(CamelJBangMain main) {
         super(main);
+        projectNameSuppliers.add(() -> projectNameFromFilePath(() -> 
filePath));
     }
 
     public Integer doCall() throws Exception {
@@ -64,15 +59,7 @@ public class KubernetesDelete extends KubernetesBaseCommand {
             }
         }
 
-        String projectName;
-        if (name != null) {
-            projectName = KubernetesHelper.sanitize(name);
-        } else if (filePath != null) {
-            projectName = 
KubernetesHelper.sanitize(FileUtil.onlyName(SourceScheme.onlyName(filePath)));
-        } else {
-            printer().println("Name or source file must be set");
-            return 1;
-        }
+        String projectName = getProjectName();
 
         // Next, try the project name in the run dir
         if (resolvedManifestDir == null) {
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java
 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java
index ab0eed087da..cf28668bb55 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExport.java
@@ -130,6 +130,7 @@ public class KubernetesExport extends Export {
         quarkusVersion = configurer.quarkusVersion;
 
         files = configurer.files;
+        name = configurer.name;
         gav = configurer.gav;
         repositories = configurer.repositories;
         dependencies = configurer.dependencies;
@@ -468,10 +469,12 @@ public class KubernetesExport extends Export {
     }
 
     protected String getProjectName() {
+        if (name != null) {
+            return KubernetesHelper.sanitize(name);
+        }
         if (image != null) {
-            return 
KubernetesHelper.sanitize(KubernetesHelper.sanitize(StringHelper.beforeLast(image,
 ":")));
+            return KubernetesHelper.sanitize(StringHelper.beforeLast(image, 
":"));
         }
-
         return KubernetesHelper.sanitize(super.getProjectName());
     }
 
@@ -489,6 +492,7 @@ public class KubernetesExport extends Export {
     public record ExportConfigurer(RuntimeType runtime,
             String quarkusVersion,
             List<String> files,
+            String name,
             String gav,
             String repositories,
             List<String> dependencies,
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesHelper.java
 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesHelper.java
index 31966980e53..63ede150504 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesHelper.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesHelper.java
@@ -132,12 +132,14 @@ public final class KubernetesHelper {
      * @return      sanitized name ready to be used as a Kubernetes resource 
name.
      */
     public static String sanitize(String name) {
-        name = FileUtil.onlyName(name);
-        name = StringHelper.sanitize(name);
-        name = StringHelper.camelCaseToDash(name);
-        name = name.toLowerCase(Locale.US);
-        name = name.replaceAll("[^a-z0-9-]", "");
-        name = name.trim();
+        if (name != null) {
+            name = FileUtil.onlyName(name);
+            name = StringHelper.sanitize(name);
+            name = StringHelper.camelCaseToDash(name);
+            name = name.toLowerCase(Locale.US);
+            name = name.replaceAll("[^a-z0-9-]", "");
+            name = name.trim();
+        }
         return name;
     }
 
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesPlugin.java
 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesPlugin.java
index 6ca5bc2e3b7..53fb07b93f0 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesPlugin.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesPlugin.java
@@ -30,7 +30,7 @@ public class KubernetesPlugin implements Plugin {
                 .addSubcommand("run", new CommandLine(new KubernetesRun(main)))
                 .addSubcommand("export", new CommandLine(new 
KubernetesExport(main)))
                 .addSubcommand("delete", new CommandLine(new 
KubernetesDelete(main)))
-                .addSubcommand("logs", new CommandLine(new PodLogs(main)));
+                .addSubcommand("logs", new CommandLine(new 
KubernetesPodLogs(main)));
 
         commandLine.addSubcommand("kubernetes", cmd, "k8s");
     }
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/PodLogs.java
 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesPodLogs.java
similarity index 86%
rename from 
dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/PodLogs.java
rename to 
dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesPodLogs.java
index a726816221d..ebb1d5a95d1 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/PodLogs.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesPodLogs.java
@@ -25,8 +25,6 @@ import io.fabric8.kubernetes.client.dsl.LogWatch;
 import io.fabric8.kubernetes.client.dsl.PodResource;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
 import org.apache.camel.dsl.jbang.core.commands.kubernetes.traits.BaseTrait;
-import org.apache.camel.dsl.jbang.core.common.SourceScheme;
-import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.ObjectHelper;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
@@ -34,16 +32,12 @@ import picocli.CommandLine.Command;
 import static 
org.apache.camel.dsl.jbang.core.commands.kubernetes.KubernetesHelper.getPodPhase;
 
 @Command(name = "logs", description = "Print the logs of a Kubernetes pod", 
sortOptions = false)
-public class PodLogs extends KubernetesBaseCommand {
+public class KubernetesPodLogs extends KubernetesBaseCommand {
 
     @CommandLine.Parameters(description = "The Camel file to get logs from. 
Integration name is derived from the file name.",
                             arity = "0..1", paramLabel = "<file>")
     protected String filePath;
 
-    @CommandLine.Option(names = { "--name" },
-                        description = "The integration name. Use this when the 
name should not get derived from the source file name.")
-    protected String name;
-
     @CommandLine.Option(names = { "--label" },
                         description = "Label name and value used as a pod 
selector.")
     protected String label;
@@ -66,24 +60,15 @@ public class PodLogs extends KubernetesBaseCommand {
     long maxMessageCount = -1;
     long messageCount = 0;
 
-    public PodLogs(CamelJBangMain main) {
+    public KubernetesPodLogs(CamelJBangMain main) {
         super(main);
+        projectNameSuppliers.add(() -> projectNameFromFilePath(() -> 
filePath));
     }
 
     public Integer doCall() throws Exception {
 
-        if (name == null && label == null && filePath == null) {
-            printer().println("Name or label selector must be set");
-            return 1;
-        }
-
         if (label == null) {
-            String projectName;
-            if (name != null) {
-                projectName = KubernetesHelper.sanitize(name);
-            } else {
-                projectName = 
KubernetesHelper.sanitize(FileUtil.onlyName(SourceScheme.onlyName(filePath)));
-            }
+            String projectName = getProjectName();
             label = "%s=%s".formatted(BaseTrait.KUBERNETES_LABEL_NAME, 
projectName);
         }
 
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRun.java
 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRun.java
index a677137e175..0d25eb43822 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRun.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesRun.java
@@ -28,7 +28,6 @@ import java.util.concurrent.TimeUnit;
 
 import io.fabric8.kubernetes.api.model.Pod;
 import org.apache.camel.CamelContext;
-import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
 import org.apache.camel.dsl.jbang.core.commands.CommandHelper;
 import org.apache.camel.dsl.jbang.core.commands.kubernetes.traits.BaseTrait;
@@ -41,7 +40,6 @@ import 
org.apache.camel.support.FileWatcherResourceReloadStrategy;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
-import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.concurrent.ThreadHelper;
 import picocli.CommandLine;
 
@@ -244,15 +242,22 @@ public class KubernetesRun extends KubernetesBaseCommand {
     private Thread devModeShutdownTask;
     private int devModeReloadCount;
 
-    private PodLogs reusablePodLogs;
+    private KubernetesPodLogs reusablePodLogs;
 
     public KubernetesRun(CamelJBangMain main) {
-        super(main);
+        this(main, null);
     }
 
     public KubernetesRun(CamelJBangMain main, String[] files) {
         super(main);
         filePaths = files;
+        projectNameSuppliers.add(() -> projectNameFromImage(() -> image));
+        projectNameSuppliers.add(() -> projectNameFromGav(() -> gav));
+        projectNameSuppliers.add(() -> projectNameFromFilePath(() -> 
firstFilePath()));
+    }
+
+    private String firstFilePath() {
+        return filePaths != null && filePaths.length > 0 ? filePaths[0] : null;
     }
 
     public Integer doCall() throws Exception {
@@ -328,6 +333,7 @@ public class KubernetesRun extends KubernetesBaseCommand {
                 runtime,
                 quarkusVersion,
                 List.of(filePaths),
+                name,
                 gav,
                 repositories,
                 dependencies,
@@ -382,11 +388,12 @@ public class KubernetesRun extends KubernetesBaseCommand {
     }
 
     private void setupDevMode(String projectName, String workingDir) throws 
Exception {
+        String firstPath = firstFilePath();
 
         String watchDir = ".";
         FileFilter filter = null;
-        if (filePaths != null && filePaths.length > 0) {
-            String filePath = 
FileUtil.onlyPath(SourceScheme.onlyName(filePaths[0]));
+        if (firstPath != null) {
+            String filePath = 
FileUtil.onlyPath(SourceScheme.onlyName(firstPath));
             if (filePath != null) {
                 watchDir = filePath;
             }
@@ -465,7 +472,7 @@ public class KubernetesRun extends KubernetesBaseCommand {
 
     private void startPodLogging(String projectName) throws Exception {
         try {
-            reusablePodLogs = new PodLogs(getMain());
+            reusablePodLogs = new KubernetesPodLogs(getMain());
             if (!ObjectHelper.isEmpty(namespace)) {
                 reusablePodLogs.namespace = namespace;
             }
@@ -605,24 +612,4 @@ public class KubernetesRun extends KubernetesBaseCommand {
 
         return 0;
     }
-
-    private String getProjectName() {
-        if (image != null) {
-            return KubernetesHelper.sanitize(StringHelper.beforeLast(image, 
":"));
-        }
-
-        if (gav != null) {
-            String[] ids = gav.split(":");
-            if (ids.length > 1) {
-                return KubernetesHelper.sanitize(ids[1]); // artifactId
-            }
-        }
-
-        if (filePaths != null && filePaths.length > 0) {
-            return 
KubernetesHelper.sanitize(FileUtil.onlyName(SourceScheme.onlyName(filePaths[0])));
-        }
-
-        throw new RuntimeCamelException(
-                "Failed to resolve project name - please provide --gav, 
--image option or at least one source file");
-    }
 }
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportTest.java
 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportTest.java
index e9f3b111784..1e5bf3044c9 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportTest.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportTest.java
@@ -63,6 +63,20 @@ class KubernetesExportTest extends KubernetesExportBaseTest {
         Assertions.assertEquals("1.0.0", model.getVersion());
     }
 
+    @ParameterizedTest
+    @MethodSource("runtimeProvider")
+    public void shouldGenerateNamedProject(RuntimeType rt) throws Exception {
+        KubernetesExport command = createCommand(new String[] { 
"classpath:route.yaml" },
+                "--name=projName", "--runtime=" + rt.runtime());
+        int exit = command.doCall();
+        Assertions.assertEquals(0, exit);
+
+        Model model = readMavenModel();
+        Assertions.assertEquals("org.example.project", model.getGroupId());
+        Assertions.assertEquals("proj-name", model.getArtifactId());
+        Assertions.assertEquals("1.0-SNAPSHOT", model.getVersion());
+    }
+
     @ParameterizedTest
     @MethodSource("runtimeProvider")
     public void shouldGenerateKubernetesManifest(RuntimeType rt) throws 
Exception {
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/PodLogsTest.java
 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesPodLogsTest.java
similarity index 90%
rename from 
dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/PodLogsTest.java
rename to 
dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesPodLogsTest.java
index 4b7dcdb4be5..1575b93bc0e 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/PodLogsTest.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesPodLogsTest.java
@@ -29,11 +29,11 @@ import 
org.junit.jupiter.api.condition.DisabledIfSystemProperty;
 
 @DisabledIfSystemProperty(named = "ci.env.name", matches = ".*",
                           disabledReason = "Requires too much network 
resources")
-class PodLogsTest extends KubernetesBaseTest {
+class KubernetesPodLogsTest extends KubernetesBaseTest {
 
     @Test
     public void shouldHandlePodNotFound() throws Exception {
-        PodLogs command = createCommand();
+        KubernetesPodLogs command = createCommand();
         command.name = "mickey-mouse";
         command.maxRetryAttempts = 2; // total timeout of 4 seconds
         int exit = command.doCall();
@@ -64,8 +64,8 @@ class PodLogsTest extends KubernetesBaseTest {
         Assertions.assertEquals(0, exit);
     }
 
-    private PodLogs createCommand() {
-        PodLogs command = new PodLogs(new 
CamelJBangMain().withPrinter(printer));
+    private KubernetesPodLogs createCommand() {
+        KubernetesPodLogs command = new KubernetesPodLogs(new 
CamelJBangMain().withPrinter(printer));
         command.withClient(kubernetesClient);
         return command;
     }

Reply via email to