spring-boot-devtools Neuladen von mehreren Modulen Maven Projektänderungen

9

Neuladen von mehreren Modul-Maven-Projektänderungen

Einstellung

Stellen Sie sich ein Multi-Modul Maven-Projekt vor. Die Projektstruktur ist:

%Vor%

Zum Beispiel hat submodul_5 submodul_6 und submodul_7 als Abhängigkeiten. Das Submodul_5 kann erstellt werden, um eine War-Datei zu erstellen, die bereitgestellt werden kann. Spring-Boot-Devtools bieten die Funktion des automatischen Neustarts bei jeder Änderung von submodule_5, dem Klassenpfad.

Wann immer die Anwendung ausgeführt wird mit:

%Vor%

Es werden Änderungen an submodule_5 vorgenommen (abhängig davon, welche IDE den Klassenpfad verwendet.) (für Eclipse automatisch / für InteliJ beim Drücken von Strg + F9 )) Spring-Boot startet die Anwendung automatisch neu und Änderungen werden hinzugefügt. Änderungen, die an submodule_6 oder submodule_7 auftreten, lösen keinen automatischen Neustart aus.

Fragen

  1. Gibt es eine Möglichkeit, es so zu machen, dass Sie bei Änderungen in submodule_6 oder submodule_7 einen Neustart erzwingen und die Änderungen übernehmen?
  2. Spring-boot-devtools verwendet zwei Klassenlader: "The Base Classloader" & amp; "Der Neustart Classloader". Ist es so, dass beim ersten Start der Applikation submodule_6 und submodule_7 zu "The Base Classloader" hinzugefügt werden, während submodle_5 im "The Restart Classloader" gehalten wird? Es so machen, dass, wenn submodule_5 einen Neustart erzwingt, es die Versionen von submodule_6 und submodule_7 von "The Base Classloader" verwendet?
Niek T. 17.08.2016, 13:37
quelle

2 Antworten

1

Um dieses Problem zu beheben, habe ich die Anwendung von InteliJ gestartet. ohne hinzufügen zu müssen.

%Vor%

IntelliJ und Spring-Boot scheinen sehr gut zusammenzuarbeiten. Der Grund, warum es überhaupt nicht funktionierte, war, dass ich zuerst von der Kommandozeile aus arbeitete.

Unterschied zwischen Befehlszeile und IDE

So spring-boot-devtools verwendet zwei Klassenladeprogramme, um eine Anwendung zu laden. Jars werden one im "Base classloader" geladen, Ihre Anwendung wird in den "restart classloader" geladen. Dieser letzte Klassenlader wird jedes Mal neu gestartet, wenn der Klassenpfad geändert wird.

Wenn Sie submodule_5 über die Befehlszeile ausführen, werden Submodul_6 und Submodul_7 erstellt und die Module dem Build von Submodul_5 hinzugefügt. Immer wenn Änderungen in Submodul_6 und Submodul_7 vorgenommen werden, merkt Spring-Boot dies nicht einmal, da es nur Submodul_5 beobachtet und die benötigten Jars besitzt. Selbst wenn Sie ihm ausdrücklich sagen würden, dass er diese Submodule auch sehen soll, wird er diese nicht wiederherstellen, sondern nur die bereits geladenen Jars im "Basis-Classloader" verwenden (Dies ist meine Annahme, ich bin nicht 100) % sicher, wie es funktioniert).

Immer wenn submodul_5 von der IDE ausgeführt wird, wird das jar des Submoduls_6 und des Submoduls_7 nicht erstellt. Es wird nur ihren Klassenpfad verwenden. Dies bewirkt, dass Änderungen im Klassenpfad Ihres internen Projekts (alle Submodule) den automatischen Neustart auslösen und die Änderungen angewendet werden.

EXTRA

Wenn Sie von der IDE aus fortfahren, werden Ressourcen wie html-Dateien, CSS-Dateien, XML-Dateien angezeigt. . . wird keinen Neustart auslösen, da dies keine Änderung im Klassenpfad ist. Aber die Änderungen werden weiterhin sichtbar sein.

    
Niek T. 19.08.2016, 10:08
quelle
3

Sie können in application.properties :

weitere Ordner angeben, die von spring-boot-devtools überwacht werden sollen %Vor%

Siehe Spring-Dokumentation zu using-boot-devtools-restart-additional-paths .

    
alexbt 17.08.2016 15:23
quelle