|
|
|
|
@ -0,0 +1,590 @@
|
|
|
|
|
# MCSLMS 各端开发指南
|
|
|
|
|
|
|
|
|
|
本文档详细介绍如何开发智能图书管理系统的四个客户端:CLI、GUI、Web、Android。
|
|
|
|
|
|
|
|
|
|
> **项目地址**: https://bdgit.educoder.net/pu6zrsfoy/mcslms.git
|
|
|
|
|
|
|
|
|
|
## 目录
|
|
|
|
|
|
|
|
|
|
1. [环境准备](#环境准备)
|
|
|
|
|
2. [Core核心模块开发](#core核心模块开发)
|
|
|
|
|
3. [CLI命令行端开发](#cli命令行端开发)
|
|
|
|
|
4. [GUI桌面端开发](#gui桌面端开发)
|
|
|
|
|
5. [Web浏览器端开发](#web浏览器端开发)
|
|
|
|
|
6. [Android移动端开发](#android移动端开发)
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 环境准备
|
|
|
|
|
|
|
|
|
|
### 必需软件
|
|
|
|
|
|
|
|
|
|
| 软件 | 版本要求 | 用途 |
|
|
|
|
|
|------|---------|------|
|
|
|
|
|
| JDK | 21+ | Java运行环境 |
|
|
|
|
|
| Gradle | 8.5+ | 构建工具 |
|
|
|
|
|
| Android Studio | 最新版 | Android开发 |
|
|
|
|
|
| Git | 最新版 | 版本控制 |
|
|
|
|
|
|
|
|
|
|
### 安装步骤
|
|
|
|
|
|
|
|
|
|
#### 1. 安装JDK 21
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# Windows - 使用Chocolatey
|
|
|
|
|
choco install openjdk21
|
|
|
|
|
|
|
|
|
|
# 或下载安装
|
|
|
|
|
# https://adoptium.net/temurin/releases/
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
验证安装:
|
|
|
|
|
```bash
|
|
|
|
|
java -version
|
|
|
|
|
# 输出: openjdk version "21.x.x"
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 2. 安装Gradle
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# Windows - 使用Chocolatey
|
|
|
|
|
choco install gradle
|
|
|
|
|
|
|
|
|
|
# 或手动下载
|
|
|
|
|
# https://gradle.org/releases/
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
验证安装:
|
|
|
|
|
```bash
|
|
|
|
|
gradle -v
|
|
|
|
|
# 输出: Gradle 8.5
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 3. 克隆项目
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
git clone https://bdgit.educoder.net/pu6zrsfoy/mcslms.git
|
|
|
|
|
cd mcslms
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Core核心模块开发
|
|
|
|
|
|
|
|
|
|
Core模块是所有客户端的共享基础,包含业务逻辑、数据模型和数据访问层。
|
|
|
|
|
|
|
|
|
|
### 项目结构
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
core/
|
|
|
|
|
├── src/main/java/com/smartlibrary/
|
|
|
|
|
│ ├── model/ # 数据模型
|
|
|
|
|
│ │ ├── Book.java
|
|
|
|
|
│ │ ├── Loan.java
|
|
|
|
|
│ │ └── User.java
|
|
|
|
|
│ ├── service/ # 业务服务
|
|
|
|
|
│ │ ├── BookService.java
|
|
|
|
|
│ │ ├── UserService.java
|
|
|
|
|
│ │ └── MockDataService.java
|
|
|
|
|
│ ├── database/ # 数据库访问
|
|
|
|
|
│ │ └── DatabaseConnection.java
|
|
|
|
|
│ └── ai/ # AI服务
|
|
|
|
|
│ ├── AIService.java
|
|
|
|
|
│ ├── AIModelFactory.java
|
|
|
|
|
│ ├── DeepSeekService.java
|
|
|
|
|
│ └── MockAIService.java
|
|
|
|
|
└── build.gradle
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 核心类说明
|
|
|
|
|
|
|
|
|
|
#### Book.java - 图书模型
|
|
|
|
|
```java
|
|
|
|
|
public class Book {
|
|
|
|
|
private String id;
|
|
|
|
|
private String title;
|
|
|
|
|
private String author;
|
|
|
|
|
private String isbn;
|
|
|
|
|
private String publisher;
|
|
|
|
|
private LocalDate publishDate;
|
|
|
|
|
private String category;
|
|
|
|
|
private boolean available;
|
|
|
|
|
private String bookType; // PHYSICAL, EBOOK, JOURNAL
|
|
|
|
|
|
|
|
|
|
// 构造函数、getter、setter...
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### BookService.java - 图书服务
|
|
|
|
|
```java
|
|
|
|
|
public class BookService {
|
|
|
|
|
// 添加图书
|
|
|
|
|
public boolean addBook(String bookType, String title, String author,
|
|
|
|
|
String isbn, String publisher, LocalDate publishDate,
|
|
|
|
|
String category);
|
|
|
|
|
|
|
|
|
|
// 查询所有图书
|
|
|
|
|
public List<Book> findAllBooks();
|
|
|
|
|
|
|
|
|
|
// 借阅图书
|
|
|
|
|
public boolean borrowBook(String bookId, String userId);
|
|
|
|
|
|
|
|
|
|
// 归还图书
|
|
|
|
|
public boolean returnBook(String bookId);
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 构建Core模块
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 编译
|
|
|
|
|
gradle :core:build
|
|
|
|
|
|
|
|
|
|
# 生成JAR
|
|
|
|
|
gradle :core:jar
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## CLI命令行端开发
|
|
|
|
|
|
|
|
|
|
CLI端提供命令行交互界面,适合服务器环境和自动化脚本。
|
|
|
|
|
|
|
|
|
|
### 项目结构
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
cli/
|
|
|
|
|
├── src/main/java/com/smartlibrary/cli/
|
|
|
|
|
│ └── CLIApplication.java
|
|
|
|
|
├── build.gradle
|
|
|
|
|
└── README.md
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### CLIApplication.java 核心代码
|
|
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
public class CLIApplication {
|
|
|
|
|
private final BookService bookService;
|
|
|
|
|
private final Scanner scanner;
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
new CLIApplication().run();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void run() {
|
|
|
|
|
System.out.println("=== 智能图书管理系统 CLI ===");
|
|
|
|
|
while (true) {
|
|
|
|
|
showMenu();
|
|
|
|
|
int choice = scanner.nextInt();
|
|
|
|
|
switch (choice) {
|
|
|
|
|
case 1 -> listBooks();
|
|
|
|
|
case 2 -> addBook();
|
|
|
|
|
case 3 -> borrowBook();
|
|
|
|
|
case 4 -> returnBook();
|
|
|
|
|
case 5 -> aiChat();
|
|
|
|
|
case 0 -> { return; }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void showMenu() {
|
|
|
|
|
System.out.println("\n1. 查看图书列表");
|
|
|
|
|
System.out.println("2. 添加图书");
|
|
|
|
|
System.out.println("3. 借阅图书");
|
|
|
|
|
System.out.println("4. 归还图书");
|
|
|
|
|
System.out.println("5. AI助手");
|
|
|
|
|
System.out.println("0. 退出");
|
|
|
|
|
System.out.print("请选择: ");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### build.gradle 配置
|
|
|
|
|
|
|
|
|
|
```groovy
|
|
|
|
|
plugins {
|
|
|
|
|
id 'java'
|
|
|
|
|
id 'application'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dependencies {
|
|
|
|
|
implementation project(':core')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
application {
|
|
|
|
|
mainClass = 'com.smartlibrary.cli.CLIApplication'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 打包可执行JAR
|
|
|
|
|
jar {
|
|
|
|
|
manifest {
|
|
|
|
|
attributes 'Main-Class': 'com.smartlibrary.cli.CLIApplication'
|
|
|
|
|
}
|
|
|
|
|
from {
|
|
|
|
|
configurations.runtimeClasspath.collect {
|
|
|
|
|
it.isDirectory() ? it : zipTree(it)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 运行CLI
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 方式1: 使用Gradle
|
|
|
|
|
gradle :cli:run
|
|
|
|
|
|
|
|
|
|
# 方式2: 使用脚本
|
|
|
|
|
scripts/run-cli.bat
|
|
|
|
|
|
|
|
|
|
# 方式3: 运行JAR
|
|
|
|
|
java -jar cli/build/libs/cli-1.0.0-all.jar
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## GUI桌面端开发
|
|
|
|
|
|
|
|
|
|
GUI端使用JavaFX构建桌面应用,提供图形化操作界面。
|
|
|
|
|
|
|
|
|
|
### 项目结构
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
gui/
|
|
|
|
|
├── src/main/java/com/smartlibrary/gui/
|
|
|
|
|
│ ├── GUIApplication.java # 主应用
|
|
|
|
|
│ ├── MainController.java # 主控制器
|
|
|
|
|
│ └── AIController.java # AI控制器
|
|
|
|
|
├── src/main/resources/
|
|
|
|
|
│ └── fxml/
|
|
|
|
|
│ ├── main.fxml
|
|
|
|
|
│ └── ai.fxml
|
|
|
|
|
└── build.gradle
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### GUIApplication.java 核心代码
|
|
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
public class GUIApplication extends Application {
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void start(Stage primaryStage) {
|
|
|
|
|
try {
|
|
|
|
|
FXMLLoader loader = new FXMLLoader(
|
|
|
|
|
getClass().getResource("/fxml/main.fxml"));
|
|
|
|
|
Parent root = loader.load();
|
|
|
|
|
|
|
|
|
|
Scene scene = new Scene(root, 1200, 800);
|
|
|
|
|
primaryStage.setTitle("智能图书管理系统");
|
|
|
|
|
primaryStage.setScene(scene);
|
|
|
|
|
primaryStage.show();
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
launch(args);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### build.gradle 配置
|
|
|
|
|
|
|
|
|
|
```groovy
|
|
|
|
|
plugins {
|
|
|
|
|
id 'java'
|
|
|
|
|
id 'application'
|
|
|
|
|
id 'org.openjfx.javafxplugin' version '0.1.0'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
javafx {
|
|
|
|
|
version = "21"
|
|
|
|
|
modules = ['javafx.controls', 'javafx.fxml']
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dependencies {
|
|
|
|
|
implementation project(':core')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
application {
|
|
|
|
|
mainClass = 'com.smartlibrary.gui.GUIApplication'
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 运行GUI
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 方式1: 使用Gradle
|
|
|
|
|
gradle :gui:run
|
|
|
|
|
|
|
|
|
|
# 方式2: 使用脚本
|
|
|
|
|
scripts/run-gui.bat
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Web浏览器端开发
|
|
|
|
|
|
|
|
|
|
Web端使用Spring Boot + Thymeleaf构建,提供浏览器访问界面。
|
|
|
|
|
|
|
|
|
|
### 项目结构
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
backend/
|
|
|
|
|
├── src/main/java/com/smartlibrary/web/
|
|
|
|
|
│ ├── WebApplication.java # Spring Boot启动类
|
|
|
|
|
│ └── controller/
|
|
|
|
|
│ └── WebController.java # Web控制器
|
|
|
|
|
├── src/main/resources/
|
|
|
|
|
│ ├── templates/ # Thymeleaf模板
|
|
|
|
|
│ │ ├── index.html
|
|
|
|
|
│ │ ├── books.html
|
|
|
|
|
│ │ ├── loans.html
|
|
|
|
|
│ │ └── login.html
|
|
|
|
|
│ └── application.properties
|
|
|
|
|
└── build.gradle
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### WebApplication.java
|
|
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
@SpringBootApplication
|
|
|
|
|
public class WebApplication {
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
SpringApplication.run(WebApplication.class, args);
|
|
|
|
|
System.out.println("Web服务已启动: http://localhost:8082");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### WebController.java 核心路由
|
|
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
@Controller
|
|
|
|
|
public class WebController {
|
|
|
|
|
private final BookService bookService;
|
|
|
|
|
|
|
|
|
|
@GetMapping("/")
|
|
|
|
|
public String index(Model model) {
|
|
|
|
|
model.addAttribute("bookCount", bookService.findAllBooks().size());
|
|
|
|
|
return "index";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@GetMapping("/books")
|
|
|
|
|
public String books(Model model) {
|
|
|
|
|
model.addAttribute("books", bookService.findAllBooks());
|
|
|
|
|
return "books";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@PostMapping("/books/borrow")
|
|
|
|
|
public String borrowBook(@RequestParam String bookId,
|
|
|
|
|
@RequestParam String userId) {
|
|
|
|
|
bookService.borrowBook(bookId, userId);
|
|
|
|
|
return "redirect:/loans?borrowSuccess=true";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### build.gradle 配置
|
|
|
|
|
|
|
|
|
|
```groovy
|
|
|
|
|
plugins {
|
|
|
|
|
id 'java'
|
|
|
|
|
id 'org.springframework.boot' version '3.2.0'
|
|
|
|
|
id 'io.spring.dependency-management' version '1.1.4'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dependencies {
|
|
|
|
|
implementation project(':core')
|
|
|
|
|
implementation 'org.springframework.boot:spring-boot-starter-web'
|
|
|
|
|
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
springBoot {
|
|
|
|
|
mainClass = 'com.smartlibrary.web.WebApplication'
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 运行Web
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 方式1: 使用Gradle
|
|
|
|
|
gradle :backend:bootRun
|
|
|
|
|
|
|
|
|
|
# 方式2: 使用脚本
|
|
|
|
|
scripts/run-web.bat
|
|
|
|
|
|
|
|
|
|
# 访问地址
|
|
|
|
|
http://localhost:8082
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## Android移动端开发
|
|
|
|
|
|
|
|
|
|
Android端使用Kotlin开发,提供移动设备访问能力。
|
|
|
|
|
|
|
|
|
|
### 项目结构
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
android/
|
|
|
|
|
├── src/main/
|
|
|
|
|
│ ├── java/com/smartlibrary/android/
|
|
|
|
|
│ │ ├── MainActivity.kt
|
|
|
|
|
│ │ ├── ui/
|
|
|
|
|
│ │ │ ├── BookListActivity.kt
|
|
|
|
|
│ │ │ └── AIActivity.kt
|
|
|
|
|
│ │ └── service/
|
|
|
|
|
│ │ └── BookApiService.kt
|
|
|
|
|
│ ├── res/
|
|
|
|
|
│ │ ├── layout/
|
|
|
|
|
│ │ │ ├── activity_main.xml
|
|
|
|
|
│ │ │ └── activity_book_list.xml
|
|
|
|
|
│ │ └── values/
|
|
|
|
|
│ │ └── strings.xml
|
|
|
|
|
│ └── AndroidManifest.xml
|
|
|
|
|
└── build.gradle
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### MainActivity.kt 核心代码
|
|
|
|
|
|
|
|
|
|
```kotlin
|
|
|
|
|
class MainActivity : AppCompatActivity() {
|
|
|
|
|
private lateinit var binding: ActivityMainBinding
|
|
|
|
|
|
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
|
|
super.onCreate(savedInstanceState)
|
|
|
|
|
binding = ActivityMainBinding.inflate(layoutInflater)
|
|
|
|
|
setContentView(binding.root)
|
|
|
|
|
|
|
|
|
|
setupNavigation()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun setupNavigation() {
|
|
|
|
|
binding.btnBooks.setOnClickListener {
|
|
|
|
|
startActivity(Intent(this, BookListActivity::class.java))
|
|
|
|
|
}
|
|
|
|
|
binding.btnAI.setOnClickListener {
|
|
|
|
|
startActivity(Intent(this, AIActivity::class.java))
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### build.gradle 配置
|
|
|
|
|
|
|
|
|
|
```groovy
|
|
|
|
|
plugins {
|
|
|
|
|
id 'com.android.application'
|
|
|
|
|
id 'org.jetbrains.kotlin.android'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
android {
|
|
|
|
|
namespace 'com.smartlibrary.android'
|
|
|
|
|
compileSdk 34
|
|
|
|
|
|
|
|
|
|
defaultConfig {
|
|
|
|
|
applicationId "com.smartlibrary.android"
|
|
|
|
|
minSdk 26
|
|
|
|
|
targetSdk 34
|
|
|
|
|
versionCode 1
|
|
|
|
|
versionName "1.0"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dependencies {
|
|
|
|
|
implementation project(':core')
|
|
|
|
|
implementation 'androidx.appcompat:appcompat:1.6.1'
|
|
|
|
|
implementation 'com.google.android.material:material:1.11.0'
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 运行Android
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 方式1: 使用Android Studio
|
|
|
|
|
# 打开项目 -> 选择android模块 -> Run
|
|
|
|
|
|
|
|
|
|
# 方式2: 命令行
|
|
|
|
|
gradle :android:installDebug
|
|
|
|
|
|
|
|
|
|
# 方式3: 使用脚本
|
|
|
|
|
scripts/run-android.bat
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 总结
|
|
|
|
|
|
|
|
|
|
| 端 | 技术栈 | 启动命令 | 访问方式 |
|
|
|
|
|
|----|--------|---------|---------|
|
|
|
|
|
| CLI | Java | `gradle :cli:run` | 终端 |
|
|
|
|
|
| GUI | JavaFX | `gradle :gui:run` | 桌面窗口 |
|
|
|
|
|
| Web | Spring Boot | `gradle :backend:bootRun` | http://localhost:8082 |
|
|
|
|
|
| Android | Kotlin | Android Studio | 手机/模拟器 |
|
|
|
|
|
|
|
|
|
|
所有端共享 `core` 模块,保证业务逻辑一致性。
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 初学者快速上手
|
|
|
|
|
|
|
|
|
|
### 第一步:克隆并切换到develop分支
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 克隆项目
|
|
|
|
|
git clone https://bdgit.educoder.net/pu6zrsfoy/mcslms.git
|
|
|
|
|
cd mcslms
|
|
|
|
|
|
|
|
|
|
# 切换到develop分支(包含所有四端代码)
|
|
|
|
|
git checkout develop
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 第二步:验证环境
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 检查Java版本
|
|
|
|
|
java -version
|
|
|
|
|
# 应显示: openjdk version "21.x.x"
|
|
|
|
|
|
|
|
|
|
# 检查Gradle
|
|
|
|
|
gradle -v
|
|
|
|
|
# 应显示: Gradle 8.5
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 第三步:一键构建所有模块
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# Windows
|
|
|
|
|
gradlew.bat build
|
|
|
|
|
|
|
|
|
|
# Linux/Mac
|
|
|
|
|
./gradlew build
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 第四步:依次启动各端测试
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 1. 启动CLI(命令行)
|
|
|
|
|
gradlew.bat :cli:run
|
|
|
|
|
|
|
|
|
|
# 2. 启动GUI(新开终端)
|
|
|
|
|
gradlew.bat :gui:run
|
|
|
|
|
|
|
|
|
|
# 3. 启动Web(新开终端)
|
|
|
|
|
gradlew.bat :backend:bootRun
|
|
|
|
|
# 访问 http://localhost:8082
|
|
|
|
|
|
|
|
|
|
# 4. Android需要Android Studio打开android目录
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 常见问题排查
|
|
|
|
|
|
|
|
|
|
| 问题 | 解决方案 |
|
|
|
|
|
|------|---------|
|
|
|
|
|
| `java: command not found` | 安装JDK 21并配置JAVA_HOME |
|
|
|
|
|
| `gradle: command not found` | 使用项目自带的gradlew.bat |
|
|
|
|
|
| 端口8082被占用 | 修改application.properties中的server.port |
|
|
|
|
|
| Android编译失败 | 确保安装Android SDK 34 |
|