diff --git a/pom.xml b/pom.xml
index 8e594bb01a36601873e8b046d8e495de70730963..1bcbcd6bd47dc2815e43f65f5e1491afc0da485e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,15 +29,27 @@
org.apache.maven.plugins
- maven-jar-plugin
- 3.3.0
+ maven-assembly-plugin
+ 3.6.0
+
+ jar-with-dependencies
+
com.example.climenu.Main
+
+
+ make-assembly
+ package
+
+ single
+
+
+
diff --git a/src/main/java/com/example/climenu/Main.java b/src/main/java/com/example/climenu/Main.java
index 7724999ed2f05c5a8ca575dcd43fa8f557089257..538d07233dbe37c84b74710b7fe0aa3d64f8da61 100644
--- a/src/main/java/com/example/climenu/Main.java
+++ b/src/main/java/com/example/climenu/Main.java
@@ -18,33 +18,31 @@ public class Main {
private static void runInteractiveMenu() {
Scanner scanner = new Scanner(System.in);
- MenuCommand menuCmd = new MenuCommand(); // 实例化用于调用方法
+ MenuCommand menuCmd = new MenuCommand(); // 实例化命令对象
while (true) { // 循环直到用户选择退出
- // 显示菜单(调用 MenuCommand 中的方法)
+ // 显示菜单
menuCmd.showMenu();
System.out.print("请选择操作 (输入 1-3 或 'exit' 退出): ");
+ // 处理可能的残留换行符
String input = scanner.nextLine().trim();
+ if (input.isEmpty()) {
+ input = scanner.nextLine().trim();
+ }
switch (input) {
case "1":
- // 模拟执行 -t 命令
- System.out.println("🕒 " + CommandLine.Help.Ansi.AUTO.string("@|bold,green " + java.time.LocalDateTime.now().format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) + "|@"));
+ // 调用时间显示逻辑(复用MenuCommand的实现)
+ new CommandLine(new MenuCommand()).execute("-t");
break;
case "2":
System.out.print("请输入要计算的斐波那契数列项数 N: ");
try {
String fibInput = scanner.nextLine().trim();
int n = Integer.parseInt(fibInput);
- if (n <= 0) {
- System.err.println(CommandLine.Help.Ansi.AUTO.string("@|red 请输入一个正整数。|@"));
- break;
- }
- System.out.println(CommandLine.Help.Ansi.AUTO.string("@|yellow 斐波那契数列(前" + n + "项):|@"));
- for (int i = 0; i < n; i++) {
- System.out.println(" " + CommandLine.Help.Ansi.AUTO.string("@|cyan " + fibonacci(i) + "|@"));
- }
+ // 调用统一的斐波那契计算方法
+ menuCmd.calculateAndPrintFibonacci(n);
} catch (NumberFormatException e) {
System.err.println(CommandLine.Help.Ansi.AUTO.string("@|red 输入无效,请输入一个数字。|@"));
}
@@ -61,10 +59,4 @@ public class Main {
System.out.println(); // 空行分隔
}
}
-
- // 为了在 Main 中复用,将 fibonacci 方法也移到这里,或在 MenuCommand 中设为 public static
- private static long fibonacci(int n) {
- if (n <= 1) return n;
- return fibonacci(n - 1) + fibonacci(n - 2);
- }
}
\ No newline at end of file
diff --git a/src/main/java/com/example/climenu/MenuCommand.java b/src/main/java/com/example/climenu/MenuCommand.java
index 22b3841d26999e9dd73587ef5d9d876e4dfc9be4..dd7d5ca0f0bf3594e49761f31f9ea95c7ec06753 100644
--- a/src/main/java/com/example/climenu/MenuCommand.java
+++ b/src/main/java/com/example/climenu/MenuCommand.java
@@ -32,23 +32,27 @@ public class MenuCommand implements Callable {
}
if (fibonacciCount != null) {
- if (fibonacciCount <= 0) {
- System.err.println(Ansi.AUTO.string("@|red 请输入一个正整数作为斐波那契数列的项数。|@"));
- return 1;
- }
- System.out.println(Ansi.AUTO.string("@|yellow 斐波那契数列(前" + fibonacciCount + "项):|@"));
- for (int i = 0; i < fibonacciCount; i++) {
- System.out.println(" " + Ansi.AUTO.string("@|cyan " + fibonacci(i) + "|@"));
- }
- return 0;
+ return calculateAndPrintFibonacci(fibonacciCount);
}
- // 当使用 picocli 方式运行且没有任何功能选项时,也显示菜单
+ // 当使用 picocli 方式运行且没有任何功能选项时,显示菜单
showMenu();
return 0;
}
- // 移除 private,改为 public,以便 Main 类可以调用
+ // 提取为公共方法,供交互式菜单调用
+ public int calculateAndPrintFibonacci(int count) {
+ if (count <= 0) {
+ System.err.println(Ansi.AUTO.string("@|red 请输入一个正整数作为斐波那契数列的项数。|@"));
+ return 1;
+ }
+ System.out.println(Ansi.AUTO.string("@|yellow 斐波那契数列(前" + count + "项):|@"));
+ for (int i = 0; i < count; i++) {
+ System.out.println(" " + Ansi.AUTO.string("@|cyan " + fibonacci(i) + "|@"));
+ }
+ return 0;
+ }
+
public void showMenu() {
System.out.println(Ansi.AUTO.string("@|bold,blue \n======== 欢迎使用 CLI 菜单助手 ========|@"));
System.out.println("1. " + Ansi.AUTO.string("@|yellow 显示当前时间|@"));