You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多模块Spring Boot应用Gradle热重载异常问题求助

解决Gradle多模块Spring Boot热重载失效问题

问题根源

Gradle默认运行Spring Boot应用时,会将依赖的子模块打包成Jar包加入类路径,但Spring Boot DevTools仅会监控未打包的编译输出目录(如build/classes)的文件变化。而Maven直接将子模块的target/classes目录加入类路径,所以修改lib模块代码后能正常触发热重载。

解决方案

1. 调整api模块的依赖配置,引入lib模块的编译输出而非Jar包

在api模块的build.gradle.kts(或Groovy版build.gradle)中,修改对lib模块的依赖,指定依赖其classes变体:

// build.gradle.kts
dependencies {
    // 替换原有project依赖,改用classes变体引入编译输出目录
    implementation(project(":lib", "classes"))
    // 保留其他原有依赖
    implementation("org.springframework.boot:spring-boot-starter-web")
    developmentOnly("org.springframework.boot:spring-boot-devtools")
}

2. 确认模块关联配置

在根项目的settings.gradle.kts中,确保已正确包含两个子模块:

// settings.gradle.kts
rootProject.name = "gradle-hot-reload"
include(":api")
include(":lib")

3. 开启IDE自动编译(针对IntelliJ)

  • 打开Settings > Build, Execution, Deployment > Compiler,勾选Build project automatically
  • 按Ctrl+Shift+A(Windows/Linux)或Cmd+Shift+A(Mac)搜索Registry,勾选compiler.automake.allow.when.app.running

4. 验证类路径

启动应用后,查看运行日志中的类路径信息,确认已包含lib/build/classes/kotlin/main而非lib/build/libs/lib.jar。

原理说明

通过依赖lib模块的classes变体,Gradle会直接将lib的编译输出目录加入api的类路径,Spring Boot DevTools就能监控到该目录下的代码变更,从而触发应用热重载。

内容的提问来源于stack exchange,提问作者Perry Olsson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:16:12