• Java>Java 11 -
  • Publié le :  | Modifié le :

Java sdk11 & JavaFX 11, Installation et Configuration.

Sommaire:

Why do it easy when you can do it painfull.

Cet article s'attachera à produire un pense-bête pour une migration de Java 8 vers Java 11. Et comme on le verra, ce n'est pas une mince affaire. Puisque depuis le passage à la version 9, il y a eu une modification structurelle de Java surtout dans sa partie déploiement et installation. Même s'il y a des modifications dans le langage de programmation, elles sont somme toute mineures par rapport à la partie installation et déploiement. Globalement le plus dur est l'installation du "Runtime image" et si vous y tenez transformer le jar en .exe, il y a des petites finesses qui peuvent vite pousser au renoncement. Grosso modo si vos classes sont récentes, genre Java 8 et JavaFX, il n'y aura pas trop de difficultés pour le portage de vos applications. Pour ma part, la seule limitation vient de NetBeans 10, pas moyen de réussir à lancer le jar avec un projet déclaré dès le départ en JavaFX, par contre si je lui fait un run sur la classe principale il l'affiche, il y a certainement quelque chose que j'ai omis...


Installation du SDK 11

JavaFX 11: Install Java 11
Télécharger le jdk qui vous convient Oracle Jdk 11OpenJDK, puis installez le. La différence est sur les licences, il faut savoir que l'OpenJDK est le JDK de référence de toutes les autres solutions.
Puis ajoutez deux variables d'environnement pointant vers:
JAVA_HOME le dossier d'installation de Java.
Et dans PATH le répertoire lib du JDK.


Installation de JavaFX 11

Téléchargez un JavaFX runtime approprié, GLUON JavaFX. Préférez javafx-jmods

Page de téléchargement @ GLUON de javaFx SDK 11 et JavaFX mods.
Page de téléchargement @ GLUON de javaFx SDK 11 et JavaFX mods.

Deux options s'offrent à vous, soit le SDK, soit le jmods. Il est préférable de choisir le jmods car vous n'aurez pas à tout reconfigurer, si vous décidez de faire une application modulaire et/ou de créer une image runtime. Décompressez l'archive à l'endroit désiré, évitez un dossier protégé en écriture sinon vous aurez un petit problème d'accès aux fichiers et autres paramètres de configuration,Si si testé et approuvé ;(.
Puis ajoutez un variable d'environnement, PATH_TO_FX pointant vers le répertoire lib du runtime.


Configuration des variables d'environnement, partie 1

clique droit sur le menu, recherche, tapez: "panneau de configuration". Une fois le panneau ouvert, "Système et sécurité", "Système". Puis appuyez sur "Paramètres système avancés". Le panneau "Propriétés système" s'ouvre, cliquez sur "Variables d'environnement"

panneau de configuration de windows
Panneau de configuration de windows.

Puis dans l'onglet "Variables système", cliquez sur nouvelle et faites comme sur l'image suivante en répétant cela pour les trois nouvelles variables.

Variables d'environnement de windows.
Variables d'environnement de windows.

Ici Vous trouverez l'ossature des variables à installer et à adapter selon vos dossiers de destination.

  1. JAVA_HOME="path\to\Java\jdk-11.0.2
  2. PATH="path\to\Java\jdk-11.0.2\lib"
  3. PATH_TO_FX="path\to\javafx-sdk-11.0.2\lib
  4. ou / et (Préférez javafx-jmods)
  5. PATH_TO_FX_MODS="path\to\javafx-jmods-11.0.2

Création d'une "Runtime image" personnalisée, pour les jar.

Tout d'abord cette image permet de joindre le Java SDK 11 et le JavaFX SDK 11, en une seule entité, ce qui est plus pratique, pour les IDE et la configuration des librairies. Bref on réinvente la roue puisque oracle a laissé tomber le développement d'interface graphique depuis quelques années (SWING et AWT), au profit de JavaFX qui est désolidarisé depuis le SDK 9. Mais si vous développez des applications pour PC, vous devez obligatoirement la réintégrer. Cela en dit long sur le développement d'applications sur PC au passage, chez oracle. Sans compter le procès avec Google et son système Android qui utilise Java à fond pour les applications, sans payer de royalties à Oracle, ceci expliquant cela certainement. Enfin bref...
Autre considération le choix des armes pour JavaFX 11, "javafx-sdk" ou "javafx-jmods". Si vous partez dans une création d'image c'est "javafx-jmods".

  1. Rappel, Variable d'environnement: PATH_TO_FX_MODS="path\to\javafx-jmods-11.0.2"
  2. ATTENTION pour "--output \path\to\jdkfx-11.0.2" ne doit pas exister.
  3. %JAVA_HOME%\bin\jlink --module-path %PATH_TO_FX_MODS% --add-modules=java.se,javafx.controls,javafx.fxml --bind-services --output \path\to\jdkfx-11.0.2
  4. EN CAS D'ERREUR. (+ tous les modules)
  5. jlink --module-path %PATH_TO_FX_MODS% --add-modules=java.se,javafx.controls,javafx.fxml,javafx.graphics,javafx.web,javafx.base,javafx.media --bind-services --output \path\to\jdkfx-11.0.2

Voilà l'image est créée, mais n'est pas fonctionnelle il faut encore modifier les variables d'environnement.


Configuration des variables d'environnement, partie 2

Il y a 2 variables à modifier, JAVA_HOME sinon on ne s'adressera pas au bon jDK et PATH sinon quand on lance la commande java cela ne fonctionne plus avec des contrôles JavaFX.
Le nouveau chemin et celui d'ouput dans la création de la runtime image --output \path\to\jdkfx-11.0.2

  1. JAVA_HOME="path\to\Java\jdk-11.0.2" devient "\path\to\jdkfx-11.0.2"
  2. PATH="path\to\Java\jdk-11.0.2\lib" devient "\path\to\jdkfx-11.0.2\lib"

Voilà l'image est opérationnelle, vous pouvez l'intégrer dans votre IDE favori.


Configuration de "NETBEANS 10" IDE.

Première étape intégrer votre "Runtime image" dans votre IDE:

Dans le menu "Tools" cliquez sur "Java Platforms". Sur le panneau "Java Platform Manager", cliquez sur "Add Platform...", suivez les étapes. vous devez choisir le dossier qui correspond à votre nouveau JAVA_HOME="\path\to\jdkfx-11.0.2" et lui donner un nom sans ambigüité par exemple JDKFX11
Si vous scrollez dans l'onglet "Classes" et que la "Runtime image" est correctement installée, vous devez voir apparaitre les modules JavaFX, comme sur l'image ci-dessous.

Panneau Java Platform du menu tool sur NetBeans 10.
Panneau Java Platform du menu tool sur NetBeans 10.

Deuxième étape intégrer votre image dans votre projet:

ATTENTION! Pour une raison que je n'ai pas encore trouvée ne créer pas de projet JavFX, on peut compiler une classe en manuel, mais le projet ne se lance pas, il ne trouve pas les classes. !?!

Vous devez cliquer droit sur le projet et sur "Properties". Dans le panneau ouvert cliquez sur "Libraries" et sélectionnez votre "Runtime image" dans le sélecteur juste avant le bouton "Manage Platforms..."

Panneau propriété du projet sur NetBeans 10.
Panneau propriété du projet sur NetBeans 10.

Voilà vous pouvez commencez à coder ...


Création des .Bat et .EXE pour lancer le .jar

Le .bat

Une fois votre projet en place et bien avancé, vous voudrez certainement créer un jar et le tester. Or dorénavant on ne peut plus lancer son jar en auto exécutable. Quel est l'intérêt de cette restriction? Donc il vous faudra créer un fichier .bat pour lancer le jar

  1. REM java --module-path %PATH_TO_FX% --add-modules=javafx.base,javafx.controls,javafx.graphics -jar %~dp0JARNAME.jar%*
  2. java --module-path mods -jar %~dp0JARNAME.jar%*
  3. @pause où exit
  1. Sans "runtime image" avec un sdkFX
  2. Avec "runtime image" et les jmods
  3. À noter: %~dp0JARNAME.jar%* permet de localiser le jar en chemin relatif.
  4. @pause si il y a des erreurs, toujours pratique de les voir dans la console.

Le .exe avec "Advanced Bat to EXE Converter v4.11"

Télécharger Advanced Bat to EXE Converter v4.11, c'est un programme qui permet de convertir un .bat en .exe. Avec des options très intéressantes choix d'un fichier icône, démarrage invisible(la console n'apparait pas), intégration de fichier(dont le jar) dans l'exécutable.
À noter: la variable %MYFILES% propre à "Advanced Bat to EXE Converter v4.11", permet de désigner le fichier embarqué, c'est son chemin dans le .exe

Exemple avec le jar embarqué:

  1. @echo off
  2. java --module-path mods -jar %MYFILES%\JARNAME.jar
  3. EXIT

Retour d'expérience du 02-02-2019

Bon après avoir repassé mes programmes à la version SDK 11, globalement je suis très agréablement surpris. temps estimé entre 10 et 20 minutes pour recopier les classes, puis changer les entêtes et certaines variables de la classe principale MAIN.lavar, en faisant une recherche et tout remplacer dans le dossier. Compilation et tout roule. J'ai perdu plus de temps avec "Advanced Bat to EXE Converter v4.11", et mon logiciel de malware qui lui fait les gros yeux.
Cela est en contradiction avec la conclusion, mais je reste convaincu que pour déployer une application, ce ne sera pas réservé au tout venant.

Conclusion:

En termes d'informatique, cette nouvelle étape du SDK n'est pas un modèle du genre. Pour la rétro compatibilité, on repassera, sans compter qu'on ne peut plus lancer un jar directement. Pour l'installation des SDK et autres librairies, on va devoir être ingénieur bientôt, puis pour le déploiement des applications cela va être sportif. Pour ma part, je pense que de nombreux développeurs risquent de se tourner vers d'autres langages de programmation.