Compilation et exécution avec modules

Répertoire du projet

Créer un répertoire, de nom codecorrecteur par exemple, pour le projet :
mkdir codecorrecteur

Se placer dans ce répertoire codecorrecteur et ne plus en bouger pour toutes les commandes qui suivent :
cd codecorrecteur

Placement du code source

Créez les répertoires pour les modules et leurs paquetages

mkdir src\eg.ufe.codecorrecteur\eg\ufe\codecorrecteur (pour classe Bloc du premier module)

mkdir src\eg.ufe.codecorrecteur\eg\ufe\testcodecorrecteur (pour classe TestBloc du premier module)

mkdir src\testcodecorrecteur\eg\ufe\test (pour classe TestBloc2 du deuxième module)

Code source du module eg.ufe.codecorrecteur

Placez au bon endroit les fichiers Bloc.java et TestCode.java dans le répertoire src, en modifiant éventuellement le code de l'exercice sur les codes correcteurs pour tenir compte du nom du paquetage et des imports.

Créez module-info.java dans le répertoire du module. Indiquez que le paquetage de la classe Bloc est exporté par ce module.

Voici le code des fichiers du module module-info.java, Bloc.java, TestCode.java.

Code source du module testcodecorrecteur

Placez au bon endroit le fichier TestCode2.java dans le répertoire src. Écrivez son code.

Réponse à la question posée dans l'énoncé : cette classe pourrait s'appeler TestCode. Ca n'aurait posé aucun problème puisque l'autre classe TestCode n'est pas dans le même paquetage.

Créez module-info.java dans le répertoire du module. Indiquez que ce module dépend du premier module.

Voici le code des fichiers du module module-info.java, TestCode2.java.

Compilation

A taper sur une seule ligne :

javac --module-path mods -d mods --module-source-path src ./src/eg.ufe.codecorrecteur/eg/ufe/codecorrecteur/*.java ./src/eg.ufe.codecorrecteur/eg/ufe/testcodecorrecteur/*.java ./src/testcodecorrecteur/ufe/test/*.java ./src/eg.ufe.codecorrecteur/module-info.java ./src/testcodecorrecteur/module-info.java

On obtient le message d'erreur suivant :

.\src\testcodecorrecteur\ufe\test\TestCode2.java:4: error: package eg.ufe.testcodecorrecteur is not visible
import eg.ufe.testcodecorrecteur.TestCode;
^
(package eg.ufe.testcodecorrecteur is declared in module eg.ufe.codecorrecteur, which does not export it)

Ce qui normal car TestCode2 utilise une classe du module eg.ufe.codecorrecteur, qui appartient au paquetage eg.ufe.testcodecorrecteur qui n'a pas été exporté par le module eg.ufe.codecorrecteur.

Il suffit d'exporter ce paquetage pour que tout compile. Pour cela, ajouter cette ligne dans module-info.java du module eg.ufe.codecorrecteur :
exports eg.ufe.testcodecorrecteur;

Remarque : Pour compiler, vous pouvez relancer la même commande mais maintenant que eg.ufe.testcodecorrecteur est connu du deuxième module, on peut compiler plus simplement en tapant la commande

javac --module-path mods -d mods --module-source-path src ./src/testcodecorrecteur/ufe/test/*.java

puisque javac va trouver le source du premier module grâce à l'option --module-source-path.

Exécution

java --module-path mods -m testcodecorrecteur/eg.ufe.test.TestCode