Skip to content

生产构建 ​

执行构建 ​

在 IDEA 中通过 Gradle 工具栏操作:

  1. 打开 IDEA 右侧的 Gradle 工具栏
  2. 展开对应模块 → Tasks → build
  3. 双击 build 执行完整构建(含测试)
  4. 双击 bootJar 打包可执行 JAR(跳过测试)
  5. 双击 clean 清理构建产物
  6. 双击 dependencies 查看依赖树

构建成功后,IDEA 的 Build 输出窗口会显示:

BUILD SUCCESSFUL in 1m 30s

TIP

本地快速调试时测试已默认跳过(tasks.test { enabled = false }),CI 环境可显式执行测试任务。

构建产物 ​

可执行 Fat JAR 输出目录:

bash
build/
├── classes/                   # 编译后的 class 文件
├── libs/                      # JAR 文件
│   └── guava-admin-starter-1.0.0-RELEASE.jar   # 可执行 Fat JAR
├── reports/                   # 测试报告
└── test-results/              # 测试结果

WARNING

build/ 目录为构建生成物,不要手动编辑;应修改源文件后重新 build。

本地验证 ​

构建完成后可直接运行 JAR 验证:

bash
# 运行(使用 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

默认访问:

bash
http://localhost:7003/

API 文档:

bash
http://localhost:7003/doc.html

TIP

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-boot Gradle 插件将 class 文件和全部依赖打包为可执行 Fat JAR。
  • 产物生成:输出到 build/libs/,含 guava-admin-starter-{version}.jar。

优化配置 ​

1. Gradle 构建缓存 ​

gradle.properties 已启用多项加速配置:

properties
org.gradle.configuration-cache=true   # 配置缓存,跳过重复配置阶段
org.gradle.parallel=true              # 并行构建多模块
org.gradle.caching=true               # 构建缓存,加速重复构建

2. 依赖版本管理 ​

通过 guava-parent-starter(java-platform)统一 BOM 管理,各模块无需指定版本:

kotlin
// 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-starter1.0.2-RELEASE
guava-entity-starter1.1.5-RELEASE
guava-platform-starter1.1.8-RELEASE
guava-component-starter1.0.4-RELEASE

3. Gradle Wrapper ​

项目使用 Gradle Wrapper(9.6.0),无需手动安装 Gradle。首次运行自动下载:

properties
# gradle/wrapper/gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.0-bin.zip

若下载失败,可替换为国内镜像:

properties
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-9.6.0-bin.zip

4. 内部模块发布 ​

Library 模块(entity / component / platform / parent)通过 maven-publish 发布到内部 Nexus。

方式一:IDEA 操作 ​

  1. 打开 IDEA 右侧的 Gradle 工具栏
  2. 展开要发布的模块(如 guava-entity-starter)→ Tasks → publishing
  3. 双击 publishToMavenLocal(发布到本地 Maven,用于开发联调)
  4. 或双击 publish(发布到远程 Nexus)

TIP

发布远程 Nexus 前,确保 gradle.properties 中已配置正确的 Nexus 用户名和密码。

方式二:命令行 ​

bash
# 发布到本地 Maven(开发联调)
./gradlew publishToMavenLocal

# 发布到远程 Nexus
./gradlew publish

Nexus 仓库地址:

类型URL
RELEASEhttp://scisoft.eicp.net:7071/repository/guava-release/
SNAPSHOThttp://scisoft.eicp.net:7071/repository/guava-snapshot/

失败排查 ​

错误可能原因处理
Could not resolve: com.guava:xxx内部模块未发布到本地 Maven先执行 ./gradlew publishToMavenLocal
Unsupported class file major versionJDK 版本不匹配确认使用 OpenJDK 25
Lombok method not found注解处理器未启用IDEA → Settings → Annotation Processors → 勾选 Enable
Port already in use端口被占用杀掉占用进程或修改 server.port
Gradle 下载失败网络问题配置 distributionUrl 为国内镜像
IllegalAccessError / InaccessibleObjectExceptionJDK 25 限制原生访问添加 --enable-native-access=ALL-UNNAMED
Nacos 配置未生效spring.config.import 格式错误确认 namespace / group 与 Nacos 控制台一致
MyBatis Mapper 找不到@MapperScan 缺失确认启动类有 @MapperScan("com.guava.admin.repository")

下一步 ​

构建通过后,参见 部署上线 发布到服务器。