Skip to content

构建项目

学习了 Gradle 基础后,现在让我们来构建 EnderRealm 项目。

构建前的准备

在构建项目之前,确保:

  1. JDK 21 已安装java -version 显示 21.x
  2. JDK 17 已安装JAVA_HOME_17 环境变量已设置
  3. Git 子模块已初始化git submodule status 显示所有子模块
  4. 网络正常:能够访问 Maven 仓库

构建整个项目

使用构建脚本

EnderRealm 提供了便捷的构建脚本:

bash
# 构建所有模块并部署到 _server/ 目录
./gradlew setupDevServer

这个命令会:

  1. 构建所有 Java 模块
  2. 构建 Floodgate 子模块(使用 JDK 17)
  3. 复制 JAR 文件到 _server/plugins/
  4. 复制运行时文件到 _server/

构建输出

构建成功后,你会看到类似输出:

> Task :EnderRealmServerCore:build
> Task :bedwars:build
> Task :disaster:build
> Task :BlockedInCombat:build
> Task :easy4form:build

BUILD SUCCESSFUL in 45s
15 actionable tasks: 15 executed

构建单个模块

如果只想构建特定模块:

bash
# 构建核心插件
./gradlew :EnderRealmServerCore:build

# 构建空岛战争
./gradlew :bedwars:build

# 构建灾难生存
./gradlew :disaster:build

# 构建方块战斗
./gradlew :BlockedInCombat:build

# 构建表单库
./gradlew :easy4form:build

构建输出文件

构建完成后,JAR 文件位于各模块的 build/libs/ 目录:

EnderRealmServerCore/
├── EnderRealmServerCore/build/libs/
│   └── EnderRealmServerCore-1.0-SNAPSHOT-all.jar
├── bedwars/build/libs/
│   └── bedwars-1.0-SNAPSHOT-all.jar
├── disaster/build/libs/
│   └── disaster-1.0-SNAPSHOT-all.jar
├── BlockedInCombat/build/libs/
│   └── BlockedInCombat-1.0-SNAPSHOT-all.jar
└── easy4form/build/libs/
    └── easy4form-1.0-SNAPSHOT-all.jar

提示

-all 后缀表示 Fat JAR,包含了所有依赖(除了 compileOnly 的依赖)。

增量构建

Gradle 支持增量构建,只重新构建发生变化的部分:

bash
# 第一次构建
./gradlew build
# BUILD SUCCESSFUL in 45s

# 修改代码后再次构建
./gradlew build
# BUILD SUCCESSFUL in 5s(只重新构建了变化的部分)

强制重新构建

如果需要强制重新构建所有模块:

bash
# 清理并重新构建
./gradlew clean build

# 或者使用强制参数
./gradlew setupDevServer -Pforce

构建常见问题

Q: 构建失败,提示 JDK 版本错误?

A: 检查以下配置:

bash
# 验证 JDK 21
java -version

# 验证 JAVA_HOME
echo $JAVA_HOME        # macOS/Linux
echo $env:JAVA_HOME    # Windows PowerShell

# 验证 JAVA_HOME_17
echo $JAVA_HOME_17     # macOS/Linux
echo $env:JAVA_HOME_17 # Windows PowerShell

Q: 构建失败,提示网络错误?

A: 检查网络连接,或配置代理:

bash
# 配置 HTTP 代理
./gradlew build -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=7890

# 配置 HTTPS 代理
./gradlew build -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=7890

Q: 构建失败,提示依赖下载失败?

A: 尝试以下方法:

bash
# 清理 Gradle 缓存
rm -rf ~/.gradle/caches

# 重新构建
./gradlew build --refresh-dependencies

Q: 构建失败,提示 Floodgate 构建失败?

A: 确保:

  1. JAVA_HOME_17 环境变量已设置
  2. JDK 17 已正确安装
  3. 子模块已初始化

Q: 如何查看构建详细日志?

A: 使用以下参数:

bash
# 信息级别
./gradlew build --info

# 调试级别
./gradlew build --debug

# 堆栈跟踪
./gradlew build --stacktrace

构建最佳实践

1. 定期清理构建

bash
# 清理构建输出
./gradlew clean

# 清理开发服务器
./gradlew cleanDevServer

2. 使用增量构建

增量构建可以显著加快开发速度,只在必要时使用 clean

3. 检查构建输出

构建完成后,检查 JAR 文件是否正确生成:

bash
# 查看 JAR 文件大小
ls -lh */build/libs/*-all.jar

# 验证 JAR 文件内容
jar tf bedwars/build/libs/bedwars-1.0-SNAPSHOT-all.jar | head -20

4. 使用构建缓存

Gradle 支持构建缓存,可以加速后续构建:

bash
# 启用构建缓存
./gradlew build --build-cache

下一步

项目构建完成后,让我们继续学习 开发服务器