Introduction au système de modules Java (scie sauteuse)
À partir de Java 9, la plate-forme Java a reçu l'une de ses mises à jour les plus importantes avec l'introduction du système de modules, également connu sous le nom de Project Jigsaw. L'objectif principal de ce projet était de rendre Java plus évolutif pour les petits appareils, d'améliorer les performances, de faciliter la maintenance et l'évolution des bibliothèques et applications Java, ainsi que d'offrir un système plus sûr et plus robuste en termes d'encapsulation de code.
Que sont les modules ?
Un module est un regroupement de code et de données qui fournit des fonctionnalités complètes et peut être compilé et distribué indépendamment. Dans le contexte de Java, un module peut contenir un ou plusieurs packages, et est défini par un fichier spécial appelé module-info.java
. Ce fichier déclare explicitement quels packages le module exporte pour être utilisés par d'autres modules, quels modules sont nécessaires à son fonctionnement et quels services il propose ou consomme.
Pourquoi des modules ?
Avant le système de modules, Java utilisait le chemin de classe pour localiser ses classes et bibliothèques. Cependant, le chemin de classe présentait plusieurs inconvénients : il était sujet aux erreurs, il n'offrait pas de moyen d'exprimer les dépendances et il n'appliquait aucune sorte d'encapsulation forte. Avec le système de modules, chaque module dispose d'un espace de noms isolé, ce qui réduit les conflits et rend le système plus sécurisé et plus facile à gérer.
Composants du système de modules
Le système de modules Java est composé de plusieurs composants clés :
- module-info.java : le fichier de définition du module, qui contient les déclarations, les exportations et les dépendances du module.
- jmod : un nouveau format de fichier qui vous permet de regrouper des modules pour la distribution.
- jlink : un outil qui vous permet de créer des images d'exécution personnalisées contenant uniquement les modules nécessaires à une application.
Définir un module
Un module est défini par un fichier module-info.java
à la racine du répertoire source du module. Ce fichier contient la déclaration du module, qui commence par le mot clé module
, suivi du nom du module, et un bloc pouvant contenir les directives suivantes :
module com.myapp {
nécessite java.sql ;
exporte com.myapp.util ;
fournit com.meuapp.servicos.InterfaceServico
avec com.meuapp.servicos.ImplementacaoServico ;
Ici, requires
est utilisé pour spécifier une dépendance sur un autre module, exports
pour déclarer quels packages sont disponibles pour d'autres modules, et provides
avec avec
pour définir un service proposé par le module.
Résoudre les dépendances
Avec le système de modules, les dépendances sont résolues au moment de la compilation, ce qui signifie que tous les modules nécessaires doivent être disponibles pour que la compilation réussisse. Cela élimine le problème de "l'enfer JAR" qui était courant avec l'utilisation du chemin de classe.
Encapsulation forte
En plus de résoudre les dépendances, le système de modules permet une forte encapsulation. Cela signifie qu'un module peut cacher ses classes internes aux autres modules, exposant uniquement ce qui est nécessaire. Cette fonctionnalité augmente la sécurité et l'intégrité du code, car elle empêche l'utilisation abusive de classes internes qui ne sont pas destinées à un usage public.
Compilation et exécution de modules
Pour compiler un module, vous utilisez le compilateur javac
avec le fichier module-info.java
. Une fois compilé, le module peut être exécuté avec l'outil java
, en spécifiant le nom du module et la classe contenant la méthode main
.
Conclusion
Le système de modules introduit dans Java 9 constitue une avancée significative pour la plate-forme Java. Il offre une meilleure façon d'organiser et de gérer le code et les dépendances, offre une encapsulation plus solide et facilite la création d'applications Java plus légères et plus sécurisées. Même si la transition vers le système de modules peut nécessiter une courbe d'apprentissage et une refactorisation du code existant, les avantages à long terme sont significatifs pour la communauté Java.
Étant donné que le système de modules représente un changement profond dans la manière dont Java est organisé et exécuté, il est important que les développeurs se familiarisent avec ses concepts et ses outils. La migration vers le système de modules peut être un processus progressif, mais il s'agit d'une étape importante pour garantir que les applications Java sont durables et prêtes à relever les futurs défis informatiques.