假设我们有一个带有子项目的 gradle 项目。
.
├── app
│ ...
│ └── build.gradle.kts
├── lib
│ ...
│ └── build.gradle.kts
└── settings.gradle.kts
// settings.gradle.kts
rootProject.name = "myproject"
include("app")
include("lib")
// app/build.gradle.kts
dependencies {
developmentOnly("org.springframework.boot:spring-boot-devtools")
implementation(project(":lib"))
}
现在,我们运行:app:bootRun
。每次我们运行:app:compileKotlin
kotlin 项目(或:app:compileJava
java 项目)时,应用程序都会使用子项目中的更改重新加载app
=> 一切正常,热重载完美运行。
当我们运行的时候:lib:compileKotlin
,应用程序被重新加载。但是,子项目的更改lib
并不是最新的。
据我所知,Spring Boot 分为 2 个类路径。一个用于app
子项目 (类路径 1),另一个用于所有其他依赖项 (类路径 2)。
如果有办法告诉 Spring Boot 将特定依赖项从“classpath 2”移动到“classpath 1”,那就太好了。在本例中,我们想告诉 Spring Boot 还应该重新加载依赖项的编译文件:lib
。
我不是这方面的专家,但我想象在 application.properties 中有类似这样的内容:
spring.devtools.restart.additional-hot-reload-packages=com.company.myproject.lib
如果 spring hot reload 机制需要在加载 application.properties 之前进行此配置,我们可以通过环境变量进行配置。
这样,无论 maven、gradle、IDE 或任何工具,配置都可以起作用。