想象一个多模块的Maven项目。项目结构为:
pom.xml //parentpom | pom.xml //submodule_1 | pom.xml //submodule_2 . . . pom.xml //submodule_7
例如,submodule_5具有submodule_6和submodule_7作为依赖项。可以构建submodule_5来构造可以部署的War文件。 Spring-Boot-Devtools 提供了每当 对classmodule 的submodule_5进行更改时自动重启的功能。
每当使用以下命令运行应用程序时:
mvn spring-boot:run
然后对submodule_5进行更改(取决于您使用的类路径是否更改了。(对于 Eclipse 自动/对于按+的 InteliJ ),spring- boot自动重启应用程序并添加更改。submodule_6或submodule_7发生的更改不会触发自动重启。Ctrl``F9
Ctrl``F9
为了解决这个问题,我开始从 InteliJ 内部运行该应用程序。无需添加。
spring.devtools.restart.additional-paths=../submodule_6,../submodule_7
IntelliJ 和 spring-boot 似乎可以很好地协同工作。首先它对我不起作用的原因是因为我起初是从命令行进行工作的。
因此 spring-boot-devtools 使用两个类加载器来加载应用程序。jar将被加载 那些 在“基地类加载器”,你的应用程序将在“重启类加载器”加载。每当类路径发生变化时,最后一个类加载器将重新启动。
每当从命令行运行submodule_5时,它将构建submodule_6和submodule_7并将jar添加到submodule_5的构建中。每当在submodule_6和submodule_7中进行更改时,spring- boot甚至都不会注意到,因为它仅监视submodule_5并具有所需的jar。即使您明确要求它也监视那些子模块,它仍然不会重建它们,它只会继续使用已经在“基本类加载器”中加载的jar(这是我的假设,我不是100 %确定其运作方式)。
每当从IDE中运行submodule_5时,它都不会创建submodule_6和submodule_7的jar。它将仅使用其classpath。这样一来,您的intire项目的classpath(所有子模块)中的更改将触发自动重启,并且更改将被应用。
额外
每当从IDE运行时,都会更改为html-files,css-files,xml- files等资源。。。不会触发重新启动,因为这不是类路径中的更改。但是更改仍然可见。