Passer au contenu principal

Remplacement à chaud 26.02

Ouvrir dans ChatGPT

Un outil de remplacement à chaud applique les modifications des classes compilées à l’application en cours d’exécution, sans redémarrage. L’application conserve son état entre les mises à jour. L’outil est indiqué dans la configuration du plug-in de build webforJ et se connecte au démarrage de l’application par le build. La commande d’exécution reste la même et le projet ne déclare aucune dépendance pour cet outil.

Deux outils sont pris en charge :

  • HotswapAgent est open source. Le plug-in de build télécharge l’agent lors de la première exécution et le met en cache.
  • JRebel est un produit commercial. Il nécessite votre propre installation et une licence.

Configurez-en un seul. Un build qui en indique deux échoue en affichant une erreur mentionnant les deux.

HotswapAgent​

Un élément vide constitue une configuration complète :

pom.xml
<plugin>
<groupId>com.webforj</groupId>
<artifactId>webforj-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<hotswap>
<hotswapAgent/>
</hotswap>
</configuration>
</plugin>

Deux options permettent d’affiner la connexion :

OptionDescription
versionUne version précise de l’agent, au lieu de celle sélectionnée par le plug-in.
pathUn fichier JAR de l’agent présent sur le disque, utilisé directement sans téléchargement. Pour les machines sans accès réseau ou pour une version personnalisée de l’agent.
pom.xml
<hotswap>
<hotswapAgent>
<path>/path/to/hotswap-agent.jar</path>
</hotswapAgent>
</hotswap>

Modifications de la structure d’une classe​

Les modifications du corps d’une méthode s’appliquent sur n’importe quelle machine virtuelle Java. Les changements de structure d’une classe, comme l’ajout d’un champ ou d’une méthode, nécessitent une machine virtuelle qui accepte l’option -XX:+AllowEnhancedClassRedefinition, fournie par le JetBrains Runtime. Le build détecte cette fonctionnalité et l’active. Consultez la section Prérequis pour installer un JetBrains Runtime.

Sans cette fonctionnalité, les modifications du corps des méthodes s’appliquent toujours, mais les changements de structure d’une classe ne sont pas pris en compte par l’application en cours d’exécution avant son redémarrage. Le journal du build affiche un avertissement indiquant le prérequis, et le navigateur affiche une notification une seule fois.

JRebel​

JRebel est un produit commercial, distribué sous licence par son fournisseur. webforJ ne le fournit pas, ne le télécharge pas et ne participe pas à son octroi de licence. Le build lit le chemin configuré, vérifie que le fichier existe et le connecte tel quel.

Indiquez dans la configuration le chemin vers l’agent de votre installation JRebel, qu’il s’agisse d’une bibliothèque native ou d’un fichier JAR :

pom.xml
<hotswap>
<jrebel>
<path>/path/to/libjrebel64.dylib</path>
</jrebel>
</hotswap>

Le chemin est obligatoire. Un build qui sélectionne JRebel sans ce chemin échoue en affichant une erreur indiquant le paramètre manquant.

Avec JRebel, toutes les modifications des classes, y compris les changements de structure, s’appliquent sur n’importe quel runtime Java.

Sélection en ligne de commande​

La propriété webforj.hotswap remplace le fichier de build pour une seule exécution. Les valeurs acceptées sont hotswapAgent, jrebel et off. Toute autre valeur fait échouer le build avec une erreur qui répertorie les valeurs valides. La sélection de jrebel nécessite toujours que le chemin de l’agent soit indiqué dans la configuration.

mvn -Dwebforj.hotswap=off
mvn -Dwebforj.hotswap=hotswapAgent

Appliquer une modification​

Compilez une modification pour qu’elle soit appliquée à l’application en cours d’exécution. Enregistrez les fichiers dans un IDE qui compile à l’enregistrement, ou lancez une compilation dans un deuxième terminal.

Lorsque toutes les classes modifiées sont utilisées par la page affichée, la partie concernée est reconstruite sur place et l’état de l’application est conservé. Sinon, la page est entièrement rechargée : si l’application n’utilise pas de routage, si une classe est hors des routes affichées ou si la reconstruction ne peut pas être effectuée. Une modification compilée produit une seule mise à jour dans le navigateur.

Accélérer les rechargements dans IntelliJ IDEA​

IntelliJ IDEA ne compile à l’enregistrement que si les builds automatiques sont activés, et marque une pause avant chaque étape. Réduisez ces délais pour que les modifications soient appliquées plus rapidement à l’application en cours d’exécution.

Activer les builds automatiques​

Ouvrez les paramètres et activez les options suivantes :

  1. Dans Build, Execution, Deployment > Compiler, activez Build project automatically.
  1. Dans Advanced Settings > Compiler, activez Allow auto-make to start even if developed application is currently running.
  1. Dans Appearance & Behavior > System Settings, sous Autosave, activez Save files if the IDE is idle for et définissez la valeur sur 1 seconde.

Appuyez sur Ctrl+ALt+S, ou choisissez File > Settings.

Réduire les délais de build​

Définissez les clés de registre suivantes sur 0 :

CléDescription
compiler.automake.trigger.delayDélai entre une modification de fichier et le démarrage d’un build.
compiler.automake.build.while.idle.timeoutDurée d’inactivité avant le démarrage d’un build.
compiler.automake.postpone.when.idle.less.thanDurée d’inactivité en dessous de laquelle IntelliJ IDEA reporte un build.
  1. Appuyez sur Ctrl+Shift+A pour ouvrir Find Action.
  2. Saisissez Registry... et sélectionnez l’option correspondante.

Vous pouvez également appuyer deux fois sur Shift pour ouvrir Search Everywhere, passer à l’onglet Actions, puis saisir Registry.

Dans la boîte de dialogue Registry, saisissez le nom d’une clé pour filtrer la liste, puis définissez sa valeur sur 0.

avertissement

Les entrées de registre sont des paramètres avancés d’IntelliJ IDEA qui ne sont pas pris en charge. Sélectionnez Restore Defaults dans la boîte de dialogue Registry pour les réinitialiser.

Continuez à apprendre.