Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Tecnología Industrial

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

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

  1. Circuitos de Control: Fundamentos, Aplicaciones y Mejores Prácticas
  2. 5 Beneficios clave del control remoto de producción para la industria moderna
  3. Optimizar dispositivos PLCnext Control con SNMP: Guía práctica
  4. Desarrollar una aplicación de consola PLCnext usando C#: Guía para principiantes
  5. Gestión de clústeres en PLCnext: Aprovechando Kubernetes para automatización industrial
  6. Optimiza aplicaciones Java 9 en PLCnext Control usando Jlink
  7. Dominar Operadores en Java: Tipos, Sintaxis y Ejemplos Prácticos
  8. Dominando interfaces en Java: Conceptos, implementación y mejores prácticas
  9. Dominando Try‑with‑Resources en Java: Gestión automática de recursos explicada
  10. Anotaciones en Java explicadas: Tipos, ubicación y ejemplos prácticos
  11. Java 10: Mejorar Rendimiento con Compartición de Datos de Clase de Aplicación (CDS)