生产构建
执行构建
在 IDEA 中通过 Gradle 工具栏操作:
- 打开 IDEA 右侧的 Gradle 工具栏
- 展开对应模块 → Tasks → build
- 双击 build 执行完整构建(含测试)
- 双击 bootJar 打包可执行 JAR(跳过测试)
- 双击 clean 清理构建产物
- 双击 dependencies 查看依赖树
构建成功后,IDEA 的 Build 输出窗口会显示:
BUILD SUCCESSFUL in 1m 30sTIP
本地快速调试时测试已默认跳过(tasks.test { enabled = false }),CI 环境可显式执行测试任务。
构建产物
可执行 Fat JAR 输出目录:
build/
├── classes/ # 编译后的 class 文件
├── libs/ # JAR 文件
│ └── guava-admin-starter-1.0.0-RELEASE.jar # 可执行 Fat JAR
├── reports/ # 测试报告
└── test-results/ # 测试结果WARNING
build/ 目录为构建生成物,不要手动编辑;应修改源文件后重新 build。
本地验证
构建完成后可直接运行 JAR 验证:
# 运行(使用 dev profile)
java --enable-native-access=ALL-UNNAMED \
--sun-misc-unsafe-memory-access=allow \
-jar build/libs/guava-admin-starter-1.0.0-RELEASE.jar \
--spring.profiles.active=dev默认访问:
http://localhost:7003/API 文档:
http://localhost:7003/doc.htmlTIP
JDK 25 默认限制原生 API 访问,build.gradle.kts 已通过 applicationDefaultJvmArgs 和 tasks.withType<JavaExec> 自动注入 --enable-native-access 与 --sun-misc-unsafe-memory-access 参数。手动运行 java -jar 时需显式添加。
流程说明
项目基于 Spring Boot Gradle 插件的标准化构建流程,产出可执行 Fat JAR:
- 依赖解析:通过 Gradle Version Catalog(
libs.versions.toml)统一管理版本,从内部 Nexus 仓库(scisoft.eicp.net:7071)和 Maven Central 下载依赖。 - 编译:Java 25 toolchain 编译源码,Lombok 注解处理器生成 getter/setter,
spring-boot-configuration-processor生成配置元数据。 - 资源处理:复制
src/main/resources下的配置文件、Mapper XML、i18n 消息到输出目录。 - 测试:运行 JUnit 单元测试(本地默认跳过)。
- 打包:
spring-bootGradle 插件将 class 文件和全部依赖打包为可执行 Fat JAR。 - 产物生成:输出到
build/libs/,含guava-admin-starter-{version}.jar。
优化配置
1. Gradle 构建缓存
gradle.properties 已启用多项加速配置:
org.gradle.configuration-cache=true # 配置缓存,跳过重复配置阶段
org.gradle.parallel=true # 并行构建多模块
org.gradle.caching=true # 构建缓存,加速重复构建2. 依赖版本管理
通过 guava-parent-starter(java-platform)统一 BOM 管理,各模块无需指定版本:
// build.gradle.kts
dependencies {
implementation(platform(libs.guava.parent)) // 引入 BOM
implementation(libs.guava.entity) // 内部模块
implementation(libs.spring.boot.starter.web) // Spring 生态
implementation(libs.mybatis.plus.spring.boot3.starter)
}内部模块版本(libs.versions.toml):
| 模块 | 版本 |
|---|---|
guava-parent-starter | 1.0.2-RELEASE |
guava-entity-starter | 1.1.5-RELEASE |
guava-platform-starter | 1.1.8-RELEASE |
guava-component-starter | 1.0.4-RELEASE |
3. Gradle Wrapper
项目使用 Gradle Wrapper(9.6.0),无需手动安装 Gradle。首次运行自动下载:
# gradle/wrapper/gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.0-bin.zip若下载失败,可替换为国内镜像:
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-9.6.0-bin.zip4. 内部模块发布
Library 模块(entity / component / platform / parent)通过 maven-publish 发布到内部 Nexus。
方式一:IDEA 操作
- 打开 IDEA 右侧的 Gradle 工具栏
- 展开要发布的模块(如
guava-entity-starter)→ Tasks → publishing - 双击 publishToMavenLocal(发布到本地 Maven,用于开发联调)
- 或双击 publish(发布到远程 Nexus)
TIP
发布远程 Nexus 前,确保 gradle.properties 中已配置正确的 Nexus 用户名和密码。
方式二:命令行
# 发布到本地 Maven(开发联调)
./gradlew publishToMavenLocal
# 发布到远程 Nexus
./gradlew publishNexus 仓库地址:
| 类型 | URL |
|---|---|
| RELEASE | http://scisoft.eicp.net:7071/repository/guava-release/ |
| SNAPSHOT | http://scisoft.eicp.net:7071/repository/guava-snapshot/ |
失败排查
| 错误 | 可能原因 | 处理 |
|---|---|---|
Could not resolve: com.guava:xxx | 内部模块未发布到本地 Maven | 先执行 ./gradlew publishToMavenLocal |
Unsupported class file major version | JDK 版本不匹配 | 确认使用 OpenJDK 25 |
Lombok method not found | 注解处理器未启用 | IDEA → Settings → Annotation Processors → 勾选 Enable |
Port already in use | 端口被占用 | 杀掉占用进程或修改 server.port |
| Gradle 下载失败 | 网络问题 | 配置 distributionUrl 为国内镜像 |
IllegalAccessError / InaccessibleObjectException | JDK 25 限制原生访问 | 添加 --enable-native-access=ALL-UNNAMED |
| Nacos 配置未生效 | spring.config.import 格式错误 | 确认 namespace / group 与 Nacos 控制台一致 |
| MyBatis Mapper 找不到 | @MapperScan 缺失 | 确认启动类有 @MapperScan("com.guava.admin.repository") |
下一步
构建通过后,参见 部署上线 发布到服务器。