diff --git a/README.md b/README.md
index 67a5d51ce55f9285a8582836c49f4ef6b36799e6..b18ad14b202d36eb10b7d7dc99dc11c641766897 100644
--- a/README.md
+++ b/README.md
@@ -1,130 +1,60 @@
-# CLI 菜单应用 (CLI Menu App)
+# CLI Menu Application
-一个基于Java和Picocli构建的现代化命令行菜单应用程序,提供交互式菜单界面和命令行参数支持。
+这是一个基于Java的命令行菜单应用程序,具有以下特性:
+- 支持交互式菜单模式
+- 支持命令行参数模式
+- 使用picocli库进行命令行解析
+- 包含时间显示和斐波那契数列计算功能
-## 项目概述
+## 构建
-这是一个使用Maven构建的Java命令行工具,具有以下特点:
-- **双模式运行**: 支持交互式菜单模式和命令行参数模式
-- **美化界面**: 使用Picocli提供彩色输出和格式化显示
-- **功能丰富**: 包含时间显示、斐波那契数列计算等实用功能
+使用Maven构建项目:
-## 技术栈
-
-- **Java 17** - 项目使用Java 17特性
-- **Maven** - 项目构建和依赖管理
-- **Picocli 4.7.6** - 命令行参数解析和界面美化
-
-## 项目结构
-
-```
-cli-menu-app/
-├── pom.xml # Maven配置文件
-├── src/main/java/com/example/climenu/
-│ ├── Main.java # 主程序入口,处理交互式菜单
-│ └── MenuCommand.java # Picocli命令定义和逻辑实现
-└── target/ # 编译输出目录
+```bash
+mvn clean compile assembly:single
```
-## 功能特性
+这将生成两个JAR文件:
+1. `cli-menu-app-1.0-SNAPSHOT.jar` - 不包含依赖的JAR
+2. `cli-menu-app-1.0-SNAPSHOT-jar-with-dependencies.jar` - 包含所有依赖的可执行JAR
-### 1. 交互式菜单模式
-当不带参数运行程序时,进入交互式菜单:
-- **选项1**: 显示当前时间
-- **选项2**: 计算斐波那契数列(可指定项数)
-- **选项3**: 退出程序
+## 运行
-### 2. 命令行模式
-支持直接通过命令行参数调用功能:
+### 交互式菜单模式
```bash
-# 显示帮助信息
-java -jar cli-menu-app.jar --help
-
-# 显示当前时间
-java -jar cli-menu-app.jar -t
-java -jar cli-menu-app.jar --time
-
-# 计算斐波那契数列前10项
-java -jar cli-menu-app.jar -f 10
-java -jar cli-menu-app.jar --fib 10
+java -jar target/cli-menu-app-1.0-SNAPSHOT-jar-with-dependencies.jar
```
-## 快速开始
+### 命令行参数模式
-### 环境要求
-- Java 17 或更高版本
-- Maven 3.6+ (用于构建)
-
-### 构建项目
+显示当前时间:
```bash
-mvn clean package
+java -jar target/cli-menu-app-1.0-SNAPSHOT-jar-with-dependencies.jar -t
```
-### 运行程序
-
-**方式1: 交互式菜单**
+计算斐波那契数列:
```bash
-java -jar target/cli-menu-app-1.0-SNAPSHOT.jar
+java -jar target/cli-menu-app-1.0-SNAPSHOT-jar-with-dependencies.jar -f 5
```
-**方式2: 命令行模式**
+获取帮助信息:
```bash
-# 显示帮助
-java -jar target/cli-menu-app-1.0-SNAPSHOT.jar --help
-
-# 使用功能
-java -jar target/cli-menu-app-1.0-SNAPSHOT.jar --time
-java -jar target/cli-menu-app-1.0-SNAPSHOT.jar --fib 15
+java -jar target/cli-menu-app-1.0-SNAPSHOT-jar-with-dependencies.jar --help
```
-## 开发说明
-
-### 核心类说明
-
-#### Main.java
-- 程序主入口点
-- 检测命令行参数,决定运行模式
-- 实现交互式菜单循环逻辑
-
-#### MenuCommand.java
-- 使用Picocli注解定义命令行参数
-- 实现具体的功能逻辑
-- 提供菜单显示方法
-
-### 扩展功能
-要添加新功能,可以:
-1. 在`MenuCommand.java`中添加新的`@Option`注解
-2. 在`call()`方法中实现功能逻辑
-3. 在`Main.java`的交互式菜单中添加对应选项
+## 开发环境运行
-## 示例输出
+使用Maven exec插件运行:
-### 交互式菜单界面
-```
-======== 欢迎使用 CLI 菜单助手 ========
-1. 显示当前时间
-2. 计算斐波那契数列
-3. 退出程序
-========================================
-
-提示: 运行 --help 查看详细帮助信息。
+交互式菜单:
+```bash
+mvn exec:java
```
-### 命令行输出示例
+或者指定参数:
```bash
-$ java -jar cli-menu-app.jar --time
-🕒 2025-11-13 10:30:45
-
-$ java -jar cli-menu-app.jar --fib 5
-斐波那契数列(前5项):
- 0
- 1
- 1
- 2
- 3
+mvn exec:java -Dexec.args="-t"
+mvn exec:java -Dexec.args="-f 5"
```
-## 许可证
-
-本项目仅供学习和演示使用。
\ No newline at end of file
diff --git a/TODO.md b/TODO.md
index 93a44924c7c3ce436f00c7bc6ca1051d992dda61..10e625e947a663e45db9dcc11bb86658844db191 100644
--- a/TODO.md
+++ b/TODO.md
@@ -2,15 +2,17 @@
目前只能以 `mvn exec` 的方式运行,不能直接 `java -jar` 运行,例如以下命令是可以正常运行的:
```bash
# 运行交互式菜单(静默)
-mvn -q exec:java -Dexec.mainClass="com.example.climenu.Main"
+mvn exec:java "-Dexec.mainClass=com.example.climenu.Main"
# 直接显示时间(静默)
-mvn -q exec:java -Dexec.mainClass="com.example.climenu.Main" -Dexec.args="-t"
+mvn exec:java "-Dexec.mainClass=com.example.climenu.Main" "-Dexec.args=-t"
# 直接计算斐波那契(静默)
-mvn -q exec:java -Dexec.mainClass="com.example.climenu.Main" -Dexec.args="-f 5"
-```
+mvn exec:java "-Dexec.mainClass=com.example.climenu.Main" "-Dexec.args=-f 5"
+# 显示帮助信息
+mvn exec:java "-Dexec.mainClass=com.example.climenu.Main" "-Dexec.args=--help"
+```
但是如果直接 `java -jar` 运行,则会报错:
```bash
java -jar target/cli-menu-app-1.0-SNAPSHOT.jar
diff --git a/pom.xml b/pom.xml
index 8e594bb01a36601873e8b046d8e495de70730963..f24c85c94058bce0fb1727ed14bf3079814f2d27 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,18 +26,40 @@
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 3.6.2
+
+ com.example.climenu.Main
+
+
+
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..cdb901c2feafc3b70c68eb5468bcdaa5ecc892f4 100644
--- a/src/main/java/com/example/climenu/Main.java
+++ b/src/main/java/com/example/climenu/Main.java
@@ -37,16 +37,13 @@ public class Main {
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) + "|@"));
- }
+ // 统一处理流程:使用 MenuCommand 的 call 方法处理
+ menuCmd.setFibonacciCount(n);
+ menuCmd.call();
} catch (NumberFormatException e) {
- System.err.println(CommandLine.Help.Ansi.AUTO.string("@|red 输入无效,请输入一个数字。|@"));
+ // 统一处理流程:让 MenuCommand 的 call 方法处理错误
+ menuCmd.setFibonacciCount(-1); // 设置无效值触发错误处理
+ menuCmd.call();
}
break;
case "3":
diff --git a/src/main/java/com/example/climenu/MenuCommand.java b/src/main/java/com/example/climenu/MenuCommand.java
index 22b3841d26999e9dd73587ef5d9d876e4dfc9be4..139ccbd784ff45c3593a7832859d993e4b00e224 100644
--- a/src/main/java/com/example/climenu/MenuCommand.java
+++ b/src/main/java/com/example/climenu/MenuCommand.java
@@ -23,6 +23,11 @@ public class MenuCommand implements Callable {
@Option(names = {"-f", "--fib"}, description = "计算斐波那契数列前N项", paramLabel = "COUNT")
private Integer fibonacciCount;
+ // Add setter method for external access
+ public void setFibonacciCount(Integer fibonacciCount) {
+ this.fibonacciCount = fibonacciCount;
+ }
+
@Override
public Integer call() {
if (showTime) {