Spring-boot-devtools перезагружает мультимодульные изменения проекта maven

Перезагрузка изменений в мультимодульном проекте maven


настройка

Представьте себе мультимодульный проект maven. Структура проекта:

pom.xml //parentpom
   |
  pom.xml //submodule_1
   |
  pom.xml //submodule_2
   .
   .
   .
  pom.xml //submodule_7

Например, subodule_5 имеет подмодуль_6 и подмодуль_7 в качестве зависимостей. Subodule_5 можно построить для создания War-файла, который можно развернуть. Spring-Boot-Devtools предоставляют возможность автоматического перезапуска всякий раз, когда есть изменение в subodule_5, это classpath.

Всякий раз, когда приложение запускается с использованием:

mvn spring-boot:run

И вносятся изменения в subodule_5 (в зависимости от того, какая среда IDE, которую вы используете, изменили путь к классу (для Eclipse automaticaly / для InteliJ при нажатии Ctrl+ F9)) автоматически загружает программу загрузки и добавляет изменения. Изменения, которые происходят с submodule_6 или submodule_7, не запускают автоматический перезапуск.


Вопросов

  1. Есть ли способ сделать так, чтобы всякий раз, когда вы вносили изменения в submodule_6 или submodule_7, чтобы они заставляли их перезапускать и там - применять изменения?
  2. Spring-boot-devtools использует два загрузчика классов: «Base Classloader» и «Restart Classloader». Разве это так, что при первоначальном запуске приложения submodule_6 и submodule_7 добавляются в «Базовый загрузчик классов», а subodle_5 хранится в «Перезагружаемом загрузчике классов»? Сделать так, чтобы всякий раз, когда submodule_5 запустил перезагрузку, он использует версии subodule_6 и submodule_7 из «Base Classloader»?

java,spring,maven,spring-boot,spring-boot-maven-plugin,

10

Ответов: 2


настройка

Представьте себе мультимодульный проект maven. Структура проекта:

pom.xml //parentpom
   |
  pom.xml //submodule_1
   |
  pom.xml //submodule_2
   .
   .
   .
  pom.xml //submodule_7

Например, subodule_5 имеет подмодуль_6 и подмодуль_7 в качестве зависимостей. Subodule_5 можно построить для создания War-файла, который можно развернуть. Spring-Boot-Devtools предоставляют возможность автоматического перезапуска всякий раз, когда есть изменение в subodule_5, это classpath.

Всякий раз, когда приложение запускается с использованием:

mvn spring-boot:run

И вносятся изменения в subodule_5 (в зависимости от того, какая среда IDE, которую вы используете, изменили путь к классу (для Eclipse automaticaly / для InteliJ при нажатии Ctrl+ F9)) автоматически загружает программу загрузки и добавляет изменения. Изменения, которые происходят с submodule_6 или submodule_7, не запускают автоматический перезапуск.


Вопросов

  1. Есть ли способ сделать так, чтобы всякий раз, когда вы вносили изменения в submodule_6 или submodule_7, чтобы они заставляли их перезапускать и там - применять изменения?
  2. Spring-boot-devtools использует два загрузчика классов: «Base Classloader» и «Restart Classloader». Разве это так, что при первоначальном запуске приложения submodule_6 и submodule_7 добавляются в «Базовый загрузчик классов», а subodle_5 хранится в «Перезагружаемом загрузчике классов»? Сделать так, чтобы всякий раз, когда submodule_5 запустил перезагрузку, он использует версии subodule_6 и submodule_7 из «Base Classloader»?
210
4

Вы можете указать дополнительные папки для просмотра spring-boot-devtools, в application.properties :

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

См. Документацию Spring по использованию-boot-devtools-restart-дополнительных путей .


2 принят

Чтобы исправить эту проблему, я начал запускать приложение из InteliJ . без необходимости добавлять.

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

IntelliJ и spring-boot, похоже, работают вместе очень хорошо. Причина, по которой это не работала для меня, в первую очередь заключалась в том, что я сначала работал из командной строки.

Разница между командной строкой и IDE

Поэтому Spring-boot-devtools использует два загрузчика классов для загрузки приложения. Банки будут загружены из них в «Base» загрузчиком классов, ваше приложение будет загружено в «рестарта загрузчик классов». Этот последний загрузчик классов перезагружается каждый раз, когда происходит изменение пути к классам.

Всякий раз, когда подменю subodule_5 из командной строки, он будет строить subodule_6 и submodule_7 и добавлять банки в сборку subodule_5. Всякий раз, когда изменения производятся в subodule_6 и subodule_7, Spring-Boot даже не замечает, так как он только наблюдает за subodule_5 и имеет банки, в которых он нуждается. Даже если вы специально скажете, чтобы он также наблюдал за этими подмодулями, он все равно не восстановит их, он просто будет продолжать использовать банки, которые он уже загрузил в «базовый загрузчик классов» (это мое предположение, я не 100 % того, как он работает).

Всякий раз, когда выполняется подмодуль_5 из IDE, он не будет создавать банку подмодуля_6 и подмодуля_7. Он просто будет использовать их classpath. Это делает так, чтобы изменения в пути к классу объектов вашего объекта (все подмодули) запускали автоматический перезапуск и изменения были применены.

EXTRA

Всякий раз, когда работа с IDE изменяется на такие ресурсы, как html-файлы, css-файлы, xml-файлы. , , не запускает перезапуск, так как это не изменение в пути к классам. Но изменения все равно будут видны.

Java, весна, Maven, весна-ботинки, весна-загрузка Maven-плагин,
Похожие вопросы