Eclipse Photon – un meilleur support de Java 9 et 10

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 :

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 ».

Eclipse_photon_J910_001

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.

Eclipse_photon_J910_002

Avec un projet Java 9 non modulaire, les dépendances sont ajoutées par défaut dans le classpath.

Eclipse_photon_J910_003

 

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.

Eclipse_photon_J910_004

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.

Eclipse_photon_J910_005

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.

Eclipse_photon_J910_006

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.

Eclipse_photon_J910_007

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.

Eclipse_photon_J910_008

 

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.

Eclipse_photon_J910_009

Si la case est cochée, une boîte de dialogue demande la saisie du nom du module.

Eclipse_photon_J910_010

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.

Eclipse_photon_J910_011

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é.

Eclipse_photon_J910_012

Une boite de dialogue permet de modifier la configuration du module en utilisant des options.

Eclipse_photon_J910_013

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 »

Eclipse_photon_J910_014

Une boîte de dialogue permet de saisir les options.

Eclipse_photon_J910_015

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.

    Eclipse_photon_J910_016
  • Créer une implémentation d’un service qui n’existe pas encore.

    Eclipse_photon_J910_017
  • Déplacer un jar du classpath vers le module path lorsque celui-ci est ajouté en tant que dépendance avec une instruction requires.

    Eclipse_photon_J910_018
  • Créer un type ou une annotation dans un package exporté inexistant ou vide.

    Eclipse_photon_J910_019

La boîte de dialogue de recherche prend en compte les modules :
Eclipse_photon_J910_020

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.

Eclipse_photon_J910_021

 

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.

Eclipse_photon_J910_022

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.

Eclipse_photon_J910_023

L’instruction var est proposée par l’assistant aux endroits où elle peut être utilisée.

Eclipse_photon_J910_024

En laissant le curseur de la souris sur l’instruction var, une bulle d’aide affiche la Javadoc du type inféré.

Eclipse_photon_J910_025

 

De nouveaux Quick Assist

Des « Quick Assist » permettent de changer le type d’une variable locale pour utiliser l’instruction var et vice versa.

Eclipse_photon_J910_026

Eclipse_photon_J910_027

Un quick fix permet de transformer un projet Java 9 en Java 10.

Eclipse_photon_J910_028

 

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.