Spring Boot LiveReload mit Thymeleaf Templates in Intellij IDEA

PUBLISHED ON JUL 21, 2018 — JAVA, SPRING

Automatic Restart ist ein nützliches Feature in den Spring Boot DevTools. Sofern sie in einem Spring Boot Projekt eingebunden sind, wird unsere Anwendung automatisch neugestartet nachdem wir einen Build angestoßen haben. Gedacht ist das Ganze natürlich für den Start der Anwendung aus unserer IDE heraus. Hier kann man sich dann während der Entwicklung das Neustarten über die IDE nach einer Änderung getrost sparen.

In Verbindung mit dem LiveReload Plugin im Browser macht das besonders viel Spaß. Vor allem, wenn wir eine Anwendung mit Thymeleaf Templates bauen. Hier wird nach einer Änderung am HTML nicht etwa der SpringContext neugestartet (Automatic Restart) sondern nur das offene Browser Tab aktualisiert (LiveReload). So sehen wir unsere Änderung meistens schon, wenn wir von der IDE wieder zurück in den offenen Browser wechseln.

Damit das funktioniert müssen die geänderten Templates allerdings im Classpath der Anwendung liegen. Standardmäßig also unter target/classes/templates/. Mit Eclipse sollte das auch problemlos funktionieren, sofern der automatische Build eingeschaltet ist. Mit IntelliJ wollte das Ganze bei mir aber nicht so ohne Weiteres funktionieren. Nach einigem Googlen habe ich eine Lösung gefunden, die für mich funktioniert. Um euch (und mir in Zukunft…) das Suchen zu ersparen, schreibe ich das Ganze hier mal kurz nieder.

Schritt 1: DevTools mit aufnehmen

Zunächst müssen wir die DevTools in unsere pom.xml aufnehmen:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
</dependency>

Solltet ihr gradle verwenden, müsst ihr die Abhänigkeit natürlich in euer build.gradle aufnehmen. Die DevTools funktionieren mit beiden Build-Systemen.

Schritt 2: Automatischen Build aktivieren

Auch in IntelliJ lässt sich ein automatischer Build, wie aus Eclipse bekannt, aktivieren. Dazu öffnen wir die Settings und navigieren zu Preferences | Build, Execution, Deployment | Compiler und aktivieren hier Build project automatically.

Schritt 3: HTML in Resource Patterns aufnehmen

Damit der Compiler einen Build anstößt wenn wir ein Template ändern müssen wir angeben, dass auch Änderungen an einer .html Datei beobachten werden sollen.

Dafür bleiben wir auf der Settings-Seite von Schritt 2 und ergänzen hier die Resource patterns um !?*.html. Das komplette Setting sieht dann bei mir so aus:

!?*.java;!?*.form;!?*.class;!?*.groovy;!?*.scala;!?*.flex;!?*.kt;!?*.clj;!?*.html

Schritt 4: Build erlauben, wenn die Anwendung läuft

Standardmäßig baut IntelliJ nicht automatisch neu wenn die Anwendung bereits läuft. Das ist für unser gewünschtes Ziel natürlich eher ungünstig.

IntelliJ seit 2021.2

Seit IntelliJ IDEA Version 2021.2 lässt sich dieses Verhalten in den Einstellungen via Advanced Settings konfigurieren. (Danke René)

IntelliJ vor 2021.2

Diese Verhalten lässt sich nur über die Registry von IntelliJ ändern. Hierzu drücken wir 2x SHIFT und suchen dann nach Registry und wählen den Punkt unter Actions aus.

In der nun geöffneten Registry setzen wir dann Haken bei der Einstellung compiler.automake.allow.when.app.running.

Fertig

Anschließend hat das LiveReload bei mir funktioniert. Ihr dürft nur nicht vergessen das Plugin im Browser für den aktuellen Tab zu aktivieren. Das zu realisieren hat mich leider einiges an Zeit gekostet. Ich hoffe ihr habt mit dieser Methode auch Erfolg!

comments powered by Disqus