Wer kennt das Problem nicht. Man muss mit großen Java-Anwendungen arbeiten und jedes Mal seinen Webserver oder Application-Container neu starten, damit die Änderungen übernommen werden?!
Manchmal wünscht man sich, doch eine Programmiersprache herbei, die bei einem Browser-Reload die Inhalte sofort neu lädt und man einen schnelleren Entwicklungszyklus hat. Ich meine klar Kaffee kochen und Zeit vertreiben ist auch nicht schlecht, allerdings könnte dies aufgrund der Ladezeiten doch irgendwann zu Herzproblemen und Schlafstörungen führen.
Welche Möglichkeiten gibt es?
Natürlich gibt es auch unter Java einige Möglichkeiten, die das Arbeiten erleichtern und das Entwickeln deutlich beschleunigen können. Hierbei möchte ich auf die beiden größten Plugins wie JRebel und DCEVM eingehen.
Generell sind beide Plugins für das automatische neu laden von Klassen geeignet, so das die Klassen automatisch neu geladen werden. Dabei ist der größte Unterschied an der Stelle wahrscheinlich der Preis und die Herangehensweise. Da DVEVM kostenlos ist möchte ich gern in diesem Beitrag näher darauf eingehen.
JRebel
JRebel ist an der Stelle ein gutes kommerzielles Produkt, was erworben werden muss. Die Lizenz liegt bei ca. 550$. In Anbetracht der ersparten Zeit ist es sicher eine Überlegung wert doch jRebel einzusetzen. Teilweise setzt JRebel aber eine erweiterte Konfiguration voraus, damit das Auto-Reloading einwandfrei funktioniert.
https://zeroturnaround.com/software/jrebel/
DCEVM
DCEVM ist an ein freies Projekt, welches für verschiedene JVM-Versionen heruntergeladen werden kann. Ich möchte in diesem Beitrag auch eher auf diese Variante eingehen, da sie kostenlos ist und bisher gut funktioniert hat. DECVM ist hauptsächlich für Java 8 verfügbar. Es gibt mittlerweile aber auch eine Test-Version für Java 11, welche ausgetestet werden kann. Die Installation weicht auch ein wenig von der Java 8 Version ab.
http://dcevm.github.io/
Installation
Damit man DCEVM nutzen kann, muss zuerst die jeweilige Installations-Datei für die entsprechende JVM herunterladen werden. Die JAR muss mit folgendem Befehlt ausgeführt werden.
java -jar DCEVM-8u181-installer.jar
Nach dem Ausführen öffnet sich ein Fenster, womit die Installation vorgenommen werden kann. Entweder man installiert es in eine bestehende JVM oder die Installation wird eigenständig in ein neues Verzeichnis durchgeführt.

Im Assistenten einfach einen bestehenden Pfad oder einen neuen Pfad auswählen und die passende Installation durchführen. Nun ist die Installation von DCEVM eigentlich schon abgeschlossen.
IntelliJ-Plugin – HotSwapAgent
Für die optimale Funktionalität kann in IntelliJ das Plugin „HotSwapAgent“ installiert werden. Das Plugin findet sich im Plugin-Repository. Nach der Installation kann das Plugin aktiviert und unter folgendem Pfad, eingestellt werden:
Preferences -> Build, Execution, Deployment -> Debugger -> HotSwap
Hierzu sind die folgenden Einstellungen zu empfehlen, damit die Klassen automatisch aktualisiert werden.

Im Grunde ist die Installation damit auch schon abgeschlossen und das Live-Reloading sollte funktionieren. Beim Starten des Web-Containers, wie Tomcat, wird in der Konsole eine Debug-Ausgabe für den HotSwap-Agent mit angezeigt. Hieran kann man erkennen, dass die Installation funktioniert hat und das automatische neu generieren funktioniert.
Weitere IntelliJ-Einstellungen
Manchmal kann es sein, dass in IntelliJ noch weitere Einstellungen benötigt werden. So kann beim Klicken, aus IntelliJ raus, eingestellt werden, dass die Klassen automatisch aktualisiert werden sollen. Mit dem Haken „Show dialog“ wird eine kleine Meldung angezeigt, wie viele Klassen neu generiert wurden.
