Optimiza aplicaciones Java 9 en PLCnext Control usando Jlink
Con Java 9, se introdujo una nueva herramienta llamada jlink. Combina módulos y construye una imagen de runtime todo en uno. Por un lado, todo el JDK ARM de 32 bits puede ejecutarse en un PLCnext Control. Pero con jlink y módulos es posible reducir los recursos necesarios para tu aplicación Java. Crea un paquete con solo las partes necesarias del JDK para tu aplicación.
Requisitos previos
- JDK para tu sistema host
- JDK para el controlador
Los binarios de OpenJDK para muchas plataformas se pueden encontrar, por ejemplo, en AdoptOpenJDK. Para este tutorial, elegimos el Linux arm32 jdk-12.0.2+10 para el controlador y su equivalente para un sistema host Windows x64. Estamos usando las siguientes ubicaciones de los JDKs:
C: ---Java
| +---jdk-12.0.2
| ...
| ---jdk-12-ARM-32bit ...
Crear un módulo de aplicación
En este ejemplo solo estamos imprimiendo un Hello World en la consola. Para usar jlink tenemos que poner esta pequeña aplicación en un módulo. Mi punto de partida en el terminal es una carpeta llamada "HelloWorld" y una carpeta src con la siguiente estructura.
HelloWorld
---src
---de.plcnext.hello
| module-info.java
| ---de
---plcnext
---hello
HelloWorld.java
Este es nuestro pequeño ejemplo de código en el archivo HelloWorld.java:
package de.plcnext.hello;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello PLCnext world!");
}
}
Y el module-info.java es necesario para crear el módulo:
module de.pxc.hello { }
Después de crear la carpeta fuente compilamos nuestro proyecto. Para esto usamos el siguiente comando en el terminal.
C:\Java\jdk-12.0.2\bin\javac.exe -d .\modules\de.plcnext.hello .\src\de.plcnext.hello\de\plcnext\hello\HelloWorld.java .\src\de.plcnext.hello\module-info.java
Se crea una carpeta modules y clases java:
HelloWorld
---modules
---de.plcnext.hello
| module-info.class
| ---de
---plcnext
---hello
HelloWorld.class
Para probar nuestro módulo en el sistema host, podemos ejecutarlo con el siguiente comando:
C:\Java\jdk-12.0.2\bin\java.exe --module-path .\modules -m de.plcnext.hello/de.plcnext.hello.HelloWorld
Esto debería mostrar Hello PLCnext world!.
Cómo usar jlink
Ahora queremos llevar esto a nuestro dispositivo sin el JDK completo de 300MB. Para esto usamos jlink sin parámetros adicionales en el primer paso. Pero primero necesitamos una información más, qué módulos adicionales se necesitan. Esto lo averiguaremos analizando nuestro módulo con jdeps.
C:\Java\jdk-12.0.2\bin\jdeps.exe --module-path ".\modules" --add-modules "de.plcnext.hello"
Esto nos dice que necesitamos java.base adicionalmente a nuestro módulo. Como module-path elegimos la ruta a nuestra aplicación y la ruta a los jmods de nuestro JDK de plataforma objetivo. En este caso C:\Java\jdk-12-ARM-32bit\jmods.
Ahora nuestra llamada a jlink se ve así:
C:\Java\jdk-12.0.2\bin\jlink.exe --module-path ".\modules;C:\Java\jdk-12-ARM-32bit\jmods" --add-modules "de.plcnext.hello,java.base" --output HelloWorldjre
El resultado es una carpeta HelloWorldjre con solo unos 45MB. Copiamos esto a nuestro controlador. En el caso de este ejemplo a /opt/plcnext/projects/java/. Necesitamos hacer el archivo "java" en la carpeta bin de HelloWorldjre ejecutable mediante chmod +x java e iniciar nuestro módulo:
./java -m de.plcnext.hello/de.plcnext.hello.HelloWorld
Debería ejecutar la aplicación y mostrar como antes Hello PLCnext world!. Usando algunos parámetros adicionales de jlink puedes reducir el paquete aún más (en este ejemplo hasta 28MB) usando --strip-debug, --no-header-files, --no-man-pages y --compress=2. Donde la compresión ahorra más pero podría afectar el rendimiento al final.
Tecnología Industrial
- Circuitos de Control: Fundamentos, Aplicaciones y Mejores Prácticas
- 5 Beneficios clave del control remoto de producción para la industria moderna
- Optimizar dispositivos PLCnext Control con SNMP: Guía práctica
- Desarrollar una aplicación de consola PLCnext usando C#: Guía para principiantes
- Gestión de clústeres en PLCnext: Aprovechando Kubernetes para automatización industrial
- Optimiza aplicaciones Java 9 en PLCnext Control usando Jlink
- Dominar Operadores en Java: Tipos, Sintaxis y Ejemplos Prácticos
- Dominando interfaces en Java: Conceptos, implementación y mejores prácticas
- Dominando Try‑with‑Resources en Java: Gestión automática de recursos explicada
- Anotaciones en Java explicadas: Tipos, ubicación y ejemplos prácticos
- Java 10: Mejorar Rendimiento con Compartición de Datos de Clase de Aplicación (CDS)