Le support de Java 9 dans Eclipse Photon a été amélioré et le support de Java 10 a été ajouté.
Cet article fait partie d’une série composée de :
- Eclipse Photon : introduction
- Eclipse Photon : Code Mining
- Eclipse Photon : améliorations dans le JDT
- Eclipse Photon : un meilleur support de Java 9 et 10
- Eclipse Photon : un meilleur support de JUnit 5 et des tests
Remarque : il n’est pas obligatoire d’exécuter Eclipse avec Java 9 pour avoir un support de Java 9 puisque Eclipse utilise son propre compilateur incrémental. Cependant pour compiler un projet en Java 9, un runtime Java 9 doit être défini dans le build path du projet.
L’amélioration du support de Java 9 dans Eclipse Photon
Lorsqu’un Runtime Java 9 ou ultérieur est utilisé dans un projet, l’onglet classpath dans la configuration de lancement est remplacé par un onglet « Dependencies ».
Avec un projet Java 9 modulaire, donc contenant un descripteur de module (module-info.java), les dépendances sont ajoutées par défaut dans le module path.
Avec un projet Java 9 non modulaire, les dépendances sont ajoutées par défaut dans le classpath.
Le support de l’option ––release
Il est possible d’utiliser l’option ––release dans les préférences du compilateur d’un projet utilisant au moins Java 9.
L’option ––release est activée par défaut pour tout nouveau projet utilisant au moins Java 9.
Dans les versions précédentes d’Eclipse, il était possible de compiler pour une version plus ancienne du langage Java mais cette compilation utilisait les API du JDK configuré dans « Java Build Path » du projet.
Exemple : le projet est configuré avec un JDK 8 avec une conformité configurée pour Java 1.7.
L’utilisation d’API de Java 8 (Date & Time dans cet exemple) ne pose pas de soucis de compilation malgré la conformité définie sur Java 1.7.
La nouvelle option ––release du compilateur permet de préciser la version de l’API à utiliser par le compilateur.
L’option ––release est utilisable pour les versions 1.6 et supérieures de Java. L’option ––release est donc activée pour Java 9 et supérieur, si la conformité définie est 1.6 ou supérieure.
Exemple : le projet est configuré avec un JDK 10 avec une conformité configurée pour Java 1.7.
Dans cette configuration, les API inexistantes en Java 7 ne sont pas trouvées même si c’est un JDK 10 qui est utilisé dans l’exemple. Et il n’est pas nécessaire d’installer un JDK 7.
Un meilleur support des modules
Il est possible de demander la création du descripteur de module lors de la création d’un nouveau projet Java.
Si la case est cochée, une boîte de dialogue demande la saisie du nom du module.
Il est possible de faire un copier/coller du contenu d’un fichier module-info.java dans le répertoire source d’un projet pour créer son descripteur de module.
Il est possible de convertir un projet non modulaire en modulaire en utilisant l’option « Configure > Create module-info.java » du menu contextuel sur le projet.
Dans le « Build Path » du projet, il est possible de modifier les caractéristiques d’un module du module path en double cliquant sur le nœud « Is modular » ou en utilisant le bouton « Edit » lorsque le nœud « Is modular » est sélectionné.
Une boite de dialogue permet de modifier la configuration du module en utilisant des options.
Dans la gestion des configurations d’exécution, il est possible de définir des options pour modifier le graphe de modules en utilisant le bouton « Override Dependencies » de l’onglet « Dependencies »
Une boîte de dialogue permet de saisir les options.
Plusieurs quick fix (proposition d’Eclipse de correction d’une erreur à la volée) ont été ajoutés dans l’éditeur du descripteur de module :
- Déplacer un jar présent dans le classpath vers le module path.
- Créer une implémentation d’un service qui n’existe pas encore.
- Déplacer un jar du classpath vers le module path lorsque celui-ci est ajouté en tant que dépendance avec une instruction requires.
- Créer un type ou une annotation dans un package exporté inexistant ou vide.
La boîte de dialogue de recherche prend en compte les modules :
Dans un projet Java modulaire, pour utiliser un type du JDK, un quick fix permet non seulement d’ajouter un import mais aussi d’ajouter le module correspondant requis si celui-ci n’est pas défini comme dépendance dans le descripteur de module.
Le support de Java 10 dans Eclipse Photon
Java 10 peut être utilisé pour lancer Eclipse.
Java 10 peut aussi être ajouté dans les JRE utilisables (Window > Preferences > Java > Installed JREs > Add…)
Dans les propriétés d’un projet Java, il est possible de configurer le compilateur pour Java 10.
La déclaration de variables locales avec var
Le compilateur Java d’Eclipse (ECJ) supporte Java 10 et notamment la possibilité de déclarer des variables locales avec l’instruction var et l’inférence de type. Si le type ne peut être inféré par le compilateur, alors une erreur est signalée.
L’instruction var est proposée par l’assistant aux endroits où elle peut être utilisée.
En laissant le curseur de la souris sur l’instruction var, une bulle d’aide affiche la Javadoc du type inféré.
De nouveaux Quick Assist
Des « Quick Assist » permettent de changer le type d’une variable locale pour utiliser l’instruction var et vice versa.
Un quick fix permet de transformer un projet Java 9 en Java 10.
Conlusion
Photon propose des améliorations du support de Java 9 et particulièrement des modules et ajoute le support pour Java 10.
Le prochain article de cette série détaillera les nouveautés du JDT relatives à un meilleur support des tests et de JUnit 5.