Photon – 4.8 (Juin 2018), inclu des fonctionnalités de configuration des projets Java pour prendre en charge la notion de module introduite en Java 9.
1. Un projet de démonstration
Dans eclipse créer un nouveau projet Java: Sélectionner le menu : File / New / Project.





2. Le fichier descripteur de module
Si le projet Eclipse est un module Java, il faudra qu’il inclut le fichier descripteur de module module-info.java dans la racine du projet (voir l’article à ce sujet). Une fonctionnalité Eclipse permet de créer ce fichier.

package net.meddeb.eclipsemoduletuto; import java.util.logging.Logger; public class Mainclass { public static void main(String[] args) { System.out.println("Hello eclipse Java !"); Mainclass m = new Mainclass(); m.afficherMessage(); } public void afficherMessage() { final Logger logger=Logger.getLogger(this.getClass().getPackage().getName()); logger.info("Hello eclipse Java module !"); } }Après cette modification la compilation de l’application échoue. La raison est que le package java.util.logging utilisé par cette modification n’est pas accessible du fait de la modularisation du code. La solution est de déclarer implicitement le besoin de notre application/module à ce package. Pour le faire, modifier le fichier descripteur de module de manière que son contenu devienne:
module net.meddeb.eclipsemoduletuto { exports net.meddeb.eclipsemoduletuto; requires java.logging; }L’explication est que le code supplémentaire utilisé se trouve dans le package java.util.logging, exporté par le module du JRE java.logging. Pour pouvoir l’utiliser il faudra inclure ce module dans une clause requires du fichier descripteur. Une question légitime se pose dans ces conditions: pourquoi l’application se compilait et s’exécutait sans problème avant cette modification, alors qu’aucune clause requires n’a été utilisée ? La réponse à cette question est que le code de définition de la classe et le code de System.out utilisé pour l’affichage du message se trouvent dans le module de base du JRE java.base. C’est l’unique module qui est référencé implicitement et n’a pas besoin de figurer explicitement dans une clause requires du module qui l’utilise. D’un autre côté, pour que la compilation et l’exécution donctionnent, l’emplacement des fichiers des modules utilisés doit figuer dans le chemin de recherche des modules: le Modulepath.
3. Modulepath et Classpath
Faire un click droit sur le projet dans le volet de gauche, puis accéder au menu Build Path / Configure Build Path..

