Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Industriële technologie

Java 9-apps optimaliseren op PLCnext Control met Jlink

Met Java 9 werd een nieuw tooltje genaamd jlink geïntroduceerd. Het combineert modules en bouwt een all-in-one runtime-image. Aan de ene kant kan de volledige 32-bit ARM JDK op een PLCnext Control draaien. Maar met jlink en modules is het mogelijk de benodigde resources voor je Java-applicatie te reduceren. Het creëert een bundle met alleen de noodzakelijke onderdelen van de JDK die je applicatie nodig heeft.

Vereisten

  • JDK voor je hostsysteem
  • JDK voor de controller

De binaire bestanden van OpenJDK voor veel platforms zijn te vinden op bijv. AdoptOpenJDK. Voor deze tutorial kozen we de Linux arm32 jdk-12.0.2+10 voor de controller en de equivalent voor een Windows x64 hostsysteem. We gebruiken de volgende locaties voor de JDK's:

C: ---Java
    | +---jdk-12.0.2
    | ...
    | ---jdk-12-ARM-32bit
    ...

Een applicatiemodule maken

In dit voorbeeld printen we gewoon een Hello World op de console. Om jlink te gebruiken, moeten we deze kleine applicatie in een module stoppen. Mijn startpunt op de terminal is een map genaamd "HelloWorld" met een src-map met de volgende structuur:

HelloWorld
---src
    ---de.plcnext.hello
        | module-info.java
        | ---de
            ---plcnext
                ---hello
                    HelloWorld.java

Dit is onze kleine code in HelloWorld.java:

package de.plcnext.hello;
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello PLCnext world!");
    }
}

En de module-info.java is nodig om de module te maken:

module de.pxc.hello { }

Na het aanmaken van de src-map compileren we ons project. Hiervoor gebruiken we het volgende commando op de 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

Een modules-map en Java-classes worden aangemaakt:

HelloWorld
---modules
    ---de.plcnext.hello
        | module-info.class
        | ---de
            ---plcnext
                ---hello
                    HelloWorld.class

Om onze module op het hostsysteem te testen, kunnen we het draaien met:

C:\Java\jdk-12.0.2\bin\java.exe --module-path .\modules -m de.plcnext.hello/de.plcnext.hello.HelloWorld

Dit zou Hello PLCnext world! moeten outputten.

Hoe jlink te gebruiken

Nu willen we dit op ons device krijgen zonder de volledige 300 MB JDK. Daarvoor gebruiken we jlink zonder extra parameters in de eerste stap. Maar eerst hebben we één meer informatie nodig: welke additionele modules nodig zijn. Dat ontdekken we door onze module te analyseren met jdeps.

C:\Java\jdk-12.0.2\bin\jdeps.exe --module-path ".\modules" --add-modules "de.plcnext.hello"

Dit vertelt ons dat we java.base naast onze module nodig hebben. Als module-path kiezen we het pad naar onze applicatie en het pad naar de jmods van onze target-platform JDK. In dit geval C:\Java\jdk-12-ARM-32bit\jmods.

Nu ziet onze jlink-oproep er zo uit:

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

Het resultaat is een HelloWorldjre-map van slechts ongeveer 45 MB. We kopiëren dit naar onze controller. In dit voorbeeld naar /opt/plcnext/projects/java/. We moeten het bestand "java" in de HelloWorldjre/bin-map uitvoerbaar maken via chmod +x java en starten onze module:

./java -m de.plcnext.hello/de.plcnext.hello.HelloWorld

Het zou de applicatie moeten draaien en outputten zoals eerder Hello PLCnext world!. Door enkele extra parameters van jlink kun je het pakket nog verder inkrimpen (in dit voorbeeld naar 28 MB) door --strip-debug, --no-header-files, --no-man-pages en --compress=2 te gebruiken. Waarbij compressie het meest bespaart, maar de prestaties op het einde kan beïnvloeden.

Industriële technologie

  1. Regelschakelingen: Fundamenten, Toepassingen en Best Practices
  2. 5 Belangrijkste voordelen van externe productiecontrole voor de moderne industrie
  3. PLCnext Control Apparaten Optimaliseren met SNMP: Een Praktische Gids
  4. PLCnext Console-applicatie Ontwikkelen met C#: Handleiding voor Beginners
  5. Clusterbeheer op PLCnext: Kubernetes Benutten voor Industriële Automatisering
  6. Java 9-apps optimaliseren op PLCnext Control met Jlink
  7. Java-operators beheersen: typen, syntax en praktische voorbeelden
  8. Java interfaces meesteren: concepten, implementatie en best practices
  9. Java Try-with-resources meesteren: automatische resource management uitgelegd
  10. Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
  11. Java 10: Prestatieverbetering met Class-Data Sharing (CDS)