spring-boot-devtools 重装多模块专家项目更改重新加载多模块专家项目更改

重新加载多模块专家项目更改


设置

想象一个多模块专家项目。项目结构为:

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提供了自动重启的功能,每当有更改以submodule_5其类路径时。

每当使用以下命令运行应用程序时:

mvn spring-boot:run

并且对submodule_5进行更改(取决于您使用的IDE,类路径会被更改。(对于 Eclipse 自动 / 对于 InteliJ,当按 +时))spring-boot 会自动重新启动应用程序并添加更改。发生在submodule_6或submodule_7的更改不会触发自动重启。CtrlF9


问题

  1. 有没有办法让它,以便每当您在submodule_6或submodule_7进行更改时,都使它们强制重新启动并应用更改?
  2. Spring-boot-devtools使用两个类装入器:“The Base Classloader”和“The Restart Classloader”。是否在应用程序的初始启动时submodule_6和submodule_7添加到“基类装入器”中,而submodle_5保留在“重新启动类装入器”中?使每当submodule_5强制重新启动时,它都会使用submodule_6的版本,并从“基类装入器”中submodule_7出来?

答案 1

您可以在 application.properties 中指定要由 spring-boot-devtools 监视的其他文件夹:

spring.devtools.restart.additional-paths=../submodule_6,../submodule_7

请参阅Spring关于使用-boot-devtools-restart-additional-paths的文档


答案 2

为了解决这个问题,我开始从InteliJ中运行应用程序。无需添加。

spring.devtools.restart.additional-paths=../submodule_6,../submodule_7

IntelliJspring-boot似乎可以很好地协同工作。它最初对我不起作用的原因是因为我最初是在命令行上工作的。

命令行和 IDE 之间的区别

因此,spring-boot-devtools 使用两个类装入器来装入应用程序。Jars将被装入“基类装入器”中,您的应用程序将被装入“重新启动类装入器”中。每当类路径上有更改时,最后一个类装入器将重新启动。

每当从命令行运行submodule_5时,它将构建submodule_6和submodule_7,并将jar添加到submodule_5的构建中。每当submodule_6和submodule_7弹簧靴进行更改时,它甚至不会注意到,因为它只监视submodule_5并具有所需的罐子。即使你特别告诉它也要观察这些子模块,它仍然不会重建这些子模块,它只会继续使用它已经在“基类加载器”中加载的jar(这是我的假设,我不是100%确定它的工作方式)。

每当从 IDE 运行submodule_5时,它都不会创建submodule_6和submodule_7 jar。它将只使用它们的类路径。这样,服装项目的类路径(所有子模块)中的更改将触发自动重新启动并应用更改。

额外

每当从IDE运行时,都会更改为html文件,css文件,xml文件等资源。 。 。不会触发重新启动,因为这不是类路径中的更改。但这些变化仍然可见。


推荐