Optimiser les applications Java 9 sur PLCnext Control avec Jlink
Avec Java 9, un nouvel outil appelé jlink a été introduit. Il combine les modules et construit une image d'exécution tout-en-un. D'un côté, tout le JDK ARM 32 bits peut s'exécuter sur un PLCnext Control. Mais avec jlink et les modules, il est possible de réduire les ressources nécessaires pour votre application Java. Il crée un bundle avec seulement les parties nécessaires du JDK pour votre application.
Prérequis
- JDK pour votre système hôte
- JDK pour le contrôleur
Les binaires OpenJDK pour de nombreuses plateformes se trouvent par exemple sur AdoptOpenJDK. Pour ce tutoriel, nous avons choisi le Linux arm32 jdk-12.0.2+10 pour le contrôleur et son équivalent pour un système hôte Windows x64. Nous utilisons les emplacements suivants pour les JDK :
C: ---Java
| +---jdk-12.0.2
| ...
| ---jdk-12-ARM-32bit
...
Créer un module d'application
Dans cet exemple, nous affichons simplement un Hello World sur la console. Pour utiliser jlink, nous devons mettre cette petite application dans un module. Mon point de départ dans le terminal est un dossier appelé "HelloWorld" et un dossier src avec la structure suivante :
HelloWorld
---src
---de.plcnext.hello
| module-info.java
| ---de
---plcnext
---hello
HelloWorld.java
Voici notre petit exemple de code dans le fichier HelloWorld.java :
package de.plcnext.hello;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello PLCnext world!");
}
}
Et le module-info.java est nécessaire pour créer le module :
module de.pxc.hello { }
Après avoir créé le dossier source, nous compilons notre projet. Pour cela, nous utilisons la commande suivante sur le 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
Un dossier modules et des classes Java sont créés :
HelloWorld
---modules
---de.plcnext.hello
| module-info.class
| ---de
---plcnext
---hello
HelloWorld.class
Pour tester notre module sur le système hôte, nous pouvons l'exécuter avec la commande suivante :
C:\Java\jdk-12.0.2\bin\java.exe --module-path .\modules -m de.plcnext.hello/de.plcnext.hello.HelloWorld
Cela devrait afficher Hello PLCnext world!.
Comment utiliser jlink
Maintenant, nous voulons déployer cela sur notre dispositif sans le JDK complet de 300 Mo. Pour cela, nous utilisons jlink sans paramètres supplémentaires dans un premier temps. Mais d'abord, nous avons besoin d'une information supplémentaire : quels modules additionnels sont nécessaires. Nous le découvrirons en analysant notre module avec jdeps.
C:\Java\jdk-12.0.2\bin\jdeps.exe --module-path ".\modules" --add-modules "de.plcnext.hello"
Cela nous dit que nous avons besoin de java.base en plus de notre module. Comme module-path, nous choisissons le chemin vers notre application et le chemin vers les jmods de notre JDK de plateforme cible. Dans ce cas C:\Java\jdk-12-ARM-32bit\jmods.
Notre appel jlink ressemble maintenant à ceci :
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
Le résultat est un dossier HelloWorldjre d'environ 45 Mo seulement. Nous le copions sur notre contrôleur. Dans cet exemple vers /opt/plcnext/projects/java/. Nous devons rendre le fichier "java" dans le dossier bin de HelloWorldjre exécutable via chmod +x java et démarrer notre module :
./java -m de.plcnext.hello/de.plcnext.hello.HelloWorld
Il devrait exécuter l'application et afficher comme avant Hello PLCnext world!. En utilisant des paramètres additionnels de jlink, vous pouvez réduire le package encore plus (dans cet exemple jusqu'à 28 Mo) en utilisant --strip-debug, --no-header-files, --no-man-pages et --compress=2. La compression économise le plus mais pourrait nuire aux performances à la fin.
Technologie industrielle
- Circuits de Commande : Fondamentaux, Applications et Bonnes Pratiques
- Maîtriser les opérateurs Java : Types, syntaxe et exemples pratiques
- Maîtriser les interfaces Java : concepts, implémentation et bonnes pratiques
- Maîtriser le try-with-resources Java : gestion automatique des ressources expliquée
- Annotations Java expliquées : types, placement et exemples pratiques
- Java 10 : Améliorer les performances avec le partage de données de classe (AppCDS)
- 5 avantages clés du contrôle de production à distance pour l'industrie moderne
- Développer une application console PLCnext en C# : guide pour débutants
- Gestion de cluster sur PLCnext : exploiter Kubernetes pour l'automatisation industrielle