Hotswap 26.02
Una herramienta de hotswap aplica los cambios de clases compiladas a la aplicación en ejecución sin reiniciarla. La aplicación conserva su estado entre actualizaciones. La herramienta se especifica en la configuración del complemento de compilación de webforJ y se conecta cuando la compilación inicia la aplicación. El comando de ejecución no cambia y el proyecto no declara ninguna dependencia para la herramienta.
Se admiten dos herramientas:
- HotswapAgent es de código abierto. El complemento de compilación descarga el agente en la primera ejecución y lo guarda en caché.
- JRebel es un producto comercial. Requiere una instalación y una licencia propias.
Configura exactamente una. Si una compilación especifica ambas, falla con un error que las menciona.
HotswapAgent
Un elemento vacío es una configuración completa:
- Maven
- Gradle
<plugin>
<groupId>com.webforj</groupId>
<artifactId>webforj-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<hotswap>
<hotswapAgent/>
</hotswap>
</configuration>
</plugin>
webforj {
hotswap {
hotswapAgent {}
}
}
Dos opciones permiten ajustar la conexión:
| Opción | Descripción |
|---|---|
version | Una versión específica del agente, en lugar de la que selecciona el complemento. |
path | Un archivo jar del agente en el disco, que se usa directamente sin descargarlo. Para máquinas sin acceso a la red o para una compilación personalizada del agente. |
- Maven
- Gradle
<hotswap>
<hotswapAgent>
<path>/path/to/hotswap-agent.jar</path>
</hotswapAgent>
</hotswap>
webforj {
hotswap {
hotswapAgent {
path = file('/path/to/hotswap-agent.jar')
}
}
}
Cambios en la estructura de las clases
Las modificaciones del cuerpo de un método se aplican en cualquier máquina virtual Java. Los cambios en la estructura de una clase, como añadir un campo o un método, requieren una máquina virtual que acepte la opción -XX:+AllowEnhancedClassRedefinition, disponible en JetBrains Runtime. La compilación detecta esta capacidad y la activa. Consulta Requisitos previos para instalar JetBrains Runtime.
Sin esta capacidad, las modificaciones del cuerpo de los métodos siguen aplicándose, pero los cambios en la estructura de una clase no llegan a la aplicación en ejecución hasta que se reinicia. El registro de compilación muestra una advertencia que indica el requisito, y el navegador muestra un aviso una vez.
JRebel
JRebel es un producto comercial cuya licencia concede su proveedor. webforJ no lo incluye ni lo descarga, y no interviene en la concesión de licencias. La compilación lee la ruta configurada, comprueba que el archivo exista y lo conecta sin modificarlo.
Configura la ruta del agente de tu instalación de JRebel, ya sea una biblioteca nativa o un archivo jar:
- Maven
- Gradle
<hotswap>
<jrebel>
<path>/path/to/libjrebel64.dylib</path>
</jrebel>
</hotswap>
webforj {
hotswap {
jrebel {
path = file('/path/to/libjrebel64.dylib')
}
}
}
La ruta es obligatoria. Si una compilación selecciona JRebel sin especificarla, falla con un error que indica cuál es el ajuste que falta.
Con JRebel, todos los cambios de clases, incluidos los cambios en su estructura, se aplican en cualquier entorno de ejecución de Java.
Selección desde la línea de comandos
La propiedad webforj.hotswap prevalece sobre el archivo de compilación durante una sola ejecución. Los valores aceptados son hotswapAgent, jrebel y off. Cualquier otro valor hace que falle la compilación con un error que enumera los valores válidos. Si se selecciona jrebel, sigue siendo necesario especificar la ruta del agente en la configuración.
- Maven
- Gradle
mvn -Dwebforj.hotswap=off
mvn -Dwebforj.hotswap=hotswapAgent
./gradlew bootRun -Pwebforj.hotswap=off
./gradlew bootRun -Pwebforj.hotswap=hotswapAgent
Aplicar un cambio
Al compilar un cambio, este llega a la aplicación en ejecución. Guarda los cambios en un IDE que compile al guardar o ejecuta una compilación en una segunda terminal.
Si todas las clases modificadas forman parte de lo que muestra la página actual, se vuelve a crear la parte afectada sin cambiar de lugar y se conserva el estado de la aplicación. De lo contrario, la página se recarga por completo: si la aplicación no tiene enrutamiento, si una clase está fuera de las rutas mostradas o si no se puede llevar a cabo la reconstrucción. Cada cambio compilado produce una actualización en el navegador.
Acelerar las recargas en IntelliJ IDEA
IntelliJ IDEA solo compila al guardar si están habilitadas las compilaciones automáticas, y espera antes de cada paso. Reduce las esperas para que los cambios lleguen antes a la aplicación en ejecución.
Habilitar las compilaciones automáticas
Abre los ajustes y activa estas opciones:
- En Build, Execution, Deployment > Compiler, activa Build project automatically.
- En Advanced Settings > Compiler, activa Allow auto-make to start even if developed application is currently running.
- En Appearance & Behavior > System Settings, en Autosave, activa Save files if the IDE is idle for y establece el valor en
1segundo.
- Windows and Linux
- macOS
Pulsa Ctrl+ALt+S o selecciona File > Settings.
Pulsa Cmd++ o selecciona IntelliJ IDEA > Settings.
Reducir las demoras de compilación
Establece estas claves del Registro en 0:
| Clave | Descripción |
|---|---|
compiler.automake.trigger.delay | La demora entre un cambio en un archivo y el inicio de una compilación. |
compiler.automake.build.while.idle.timeout | El tiempo de inactividad que debe transcurrir antes de que se inicie una compilación. |
compiler.automake.postpone.when.idle.less.than | El tiempo de inactividad por debajo del cual IntelliJ IDEA pospone una compilación. |
- Windows and Linux
- macOS
- Pulsa Ctrl+Shift+A para abrir Find Action.
- Escribe
Registry...y selecciónalo.
- Pulsa Cmd+Shift+A para abrir Find Action.
- Escribe
Registry...y selecciónalo.
También puedes pulsar Shift dos veces para abrir Search Everywhere, cambiar a la pestaña Actions y escribir Registry.
En el cuadro de diálogo Registry, escribe el nombre de una clave para filtrar la lista y, a continuación, establece su valor en 0.
Las entradas del Registro son ajustes avanzados de IntelliJ IDEA que no cuentan con soporte. Selecciona Restore Defaults en el cuadro de diálogo Registry para restablecerlas.
Sigue aprendiendo
Vídeo · YouTubeBuild Modern Buttons in Java with webforJ
ArtículoWhat's new in version 26.02?
ArtículoJava developer productivity for web UIs: where it comes from
ArtículoWhat's new in version 26.03?
ArtículoWhat is the easiest Java web framework? A checklist
ArtículoJBang Java web app: a webforJ UI in a single file
ArtículoFrom Java to an installable web app in 15 minutes: the talk
ArtículoLow code to pro code in Java: visual editing with no lock-in
ArtículoHow to build a web app in Java, step by step