Hotswap 26.02
Ein Hotswap-Tool wendet Änderungen an kompilierten Klassen auf die laufende App an, ohne sie neu zu starten. Der Zustand der App bleibt zwischen den Aktualisierungen erhalten. Das Tool wird in der Konfiguration des webforJ-Build-Plugins angegeben und angehängt, wenn der Build die App startet. Der Ausführungsbefehl bleibt unverändert, und im Projekt muss keine Abhängigkeit dafür deklariert werden.
Es werden zwei Tools unterstützt:
- HotswapAgent ist Open Source. Das Build-Plugin lädt den Agent beim ersten Ausführen herunter und speichert ihn im Cache.
- JRebel ist ein kommerzielles Produkt. Es erfordert eine eigene Installation und Lizenz.
Konfigurieren Sie genau eines davon. Ein Build, in dem beide angegeben sind, schlägt mit einem Fehler fehl, der beide nennt.
HotswapAgent
Ein leeres Element ist eine vollständige Konfiguration:
- Maven
- Gradle
<plugin>
<groupId>com.webforj</groupId>
<artifactId>webforj-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<hotswap>
<hotswapAgent/>
</hotswap>
</configuration>
</plugin>
webforj {
hotswap {
hotswapAgent {}
}
}
Zwei Optionen ermöglichen eine genauere Konfiguration des Anbindens:
| Option | Beschreibung |
|---|---|
version | Eine bestimmte Agent-Version anstelle der vom Plugin ausgewählten Version. |
path | Eine Agent-JAR-Datei auf dem Datenträger, die direkt und ohne Download verwendet wird. Für Rechner ohne Netzwerkzugriff oder für einen benutzerdefinierten Agent-Build. |
- Maven
- Gradle
<hotswap>
<hotswapAgent>
<path>/path/to/hotswap-agent.jar</path>
</hotswapAgent>
</hotswap>
webforj {
hotswap {
hotswapAgent {
path = file('/path/to/hotswap-agent.jar')
}
}
}
Änderungen an der Klassenstruktur
Änderungen am Methodenrumpf werden auf jeder Java Virtual Machine angewendet. Änderungen an der Struktur einer Klasse, etwa ein neues Feld oder eine neue Methode, erfordern eine Virtual Machine, die die Option -XX:+AllowEnhancedClassRedefinition akzeptiert. Diese wird von der JetBrains Runtime bereitgestellt. Der Build erkennt diese Fähigkeit und aktiviert sie. Informationen zur Installation einer JetBrains Runtime finden Sie unter Voraussetzungen.
Ohne diese Fähigkeit werden Änderungen am Methodenrumpf weiterhin angewendet; eine Änderung der Klassenstruktur wird jedoch erst nach einem Neustart in der laufenden App wirksam. Das Build-Protokoll gibt eine Warnung mit der erforderlichen Voraussetzung aus, und im Browser wird einmalig ein Hinweis angezeigt.
JRebel
JRebel ist ein kommerzielles Produkt, das vom Anbieter lizenziert wird. webforJ stellt es nicht bereit, lädt es nicht herunter und ist nicht an der Lizenzierung beteiligt. Der Build liest den konfigurierten Pfad, prüft, ob die Datei vorhanden ist, und bindet sie unverändert ein.
Verweisen Sie in der Konfiguration auf den Agent aus Ihrer JRebel-Installation – entweder eine native Bibliothek oder eine JAR-Datei:
- Maven
- Gradle
<hotswap>
<jrebel>
<path>/path/to/libjrebel64.dylib</path>
</jrebel>
</hotswap>
webforj {
hotswap {
jrebel {
path = file('/path/to/libjrebel64.dylib')
}
}
}
Der Pfad ist erforderlich. Ein Build, der JRebel auswählt, ohne diesen Pfad anzugeben, schlägt mit einem Fehler fehl, der auf die fehlende Einstellung hinweist.
Mit JRebel werden alle Klassenänderungen, einschließlich Änderungen der Klassenstruktur, auf jeder Java-Laufzeitumgebung angewendet.
Auswahl über die Befehlszeile
Die Eigenschaft webforj.hotswap überschreibt die Build-Datei für einen einzelnen Lauf. Zulässige Werte sind hotswapAgent, jrebel und off. Jeder andere Wert führt dazu, dass der Build mit einem Fehler fehlschlägt, der die gültigen Werte auflistet. Bei Auswahl von jrebel muss weiterhin der Agent-Pfad in der Konfiguration angegeben sein.
- Maven
- Gradle
mvn -Dwebforj.hotswap=off
mvn -Dwebforj.hotswap=hotswapAgent
./gradlew bootRun -Pwebforj.hotswap=off
./gradlew bootRun -Pwebforj.hotswap=hotswapAgent
Änderungen anwenden
Kompilieren Sie eine Änderung, damit sie in der laufenden App wirksam wird. Speichern Sie die Änderung in einer IDE, die beim Speichern kompiliert, oder starten Sie die Kompilierung in einem zweiten Terminal.
Wenn alle geänderten Klassen zu dem gehören, was auf der aktuellen Seite gerendert wird, wird der betroffene Teil an Ort und Stelle neu aufgebaut, und der App-Zustand bleibt erhalten. Andernfalls wird die gesamte Seite neu geladen: bei einer App ohne Routing, bei einer Klasse außerhalb der gerenderten Routen oder wenn der Neuaufbau nicht ausgeführt werden kann. Eine kompilierte Änderung führt zu genau einer Aktualisierung im Browser.
Neuladevorgänge in IntelliJ IDEA beschleunigen
IntelliJ IDEA kompiliert nur dann beim Speichern, wenn automatische Builds aktiviert sind, und wartet vor jedem Schritt. Verkürzen Sie die Wartezeiten, damit eine Änderung schneller in der laufenden App wirksam wird.
Automatische Builds aktivieren
Öffnen Sie die Einstellungen und aktivieren Sie die folgenden Optionen:
- Aktivieren Sie unter Build, Execution, Deployment > Compiler die Option Build project automatically.
- Aktivieren Sie unter Advanced Settings > Compiler die Option Allow auto-make to start even if developed application is currently running.
- Aktivieren Sie unter Appearance & Behavior > System Settings im Abschnitt Autosave die Option Save files if the IDE is idle for und stellen Sie den Wert auf
1Sekunde ein.
- Windows and Linux
- macOS
Drücken Sie Ctrl+ALt+S oder wählen Sie File > Settings.
Drücken Sie Cmd++ oder wählen Sie IntelliJ IDEA > Settings.
Build-Verzögerungen verkürzen
Legen Sie für die folgenden Registry-Schlüssel den Wert 0 fest:
| Schlüssel | Beschreibung |
|---|---|
compiler.automake.trigger.delay | Die Verzögerung zwischen einer Dateiänderung und dem Start eines Builds. |
compiler.automake.build.while.idle.timeout | Die Leerlaufzeit, bevor ein Build gestartet wird. |
compiler.automake.postpone.when.idle.less.than | Die Leerlaufzeit, unterhalb derer IntelliJ IDEA einen Build aufschiebt. |
- Windows and Linux
- macOS
- Drücken Sie Ctrl+Shift+A, um Find Action zu öffnen.
- Geben Sie
Registry...ein und wählen Sie den entsprechenden Eintrag aus.
- Drücken Sie Cmd+Shift+A, um Find Action zu öffnen.
- Geben Sie
Registry...ein und wählen Sie den entsprechenden Eintrag aus.
Sie können auch zweimal Shift drücken, um Search Everywhere zu öffnen, zum Tab Actions wechseln und Registry eingeben.
Geben Sie im Dialogfeld Registry einen Schlüsselnamen ein, um die Liste zu filtern, und setzen Sie anschließend dessen Wert auf 0.
Registry-Einträge sind erweiterte, nicht unterstützte Einstellungen von IntelliJ IDEA. Wählen Sie im Dialogfeld Registry die Option Restore Defaults, um die Standardwerte wiederherzustellen.
Weiterlernen
Video · YouTubeBuild Modern Buttons in Java with webforJ
ArtikelWhat's new in version 26.02?
ArtikelJava developer productivity for web UIs: where it comes from
ArtikelWhat's new in version 26.03?
ArtikelWhat is the easiest Java web framework? A checklist
ArtikelJBang Java web app: a webforJ UI in a single file
ArtikelFrom Java to an installable web app in 15 minutes: the talk
ArtikelLow code to pro code in Java: visual editing with no lock-in
ArtikelHow to build a web app in Java, step by step