Article de reference

Système de modules de plateforme Java

Le système de modules de la plateforme Java ( JPMS ) spécifie un format de distribution pour les collections de code Java et les ressources associées. Il spécifie également un d...

Le système de modules de la plateforme Java ( JPMS ) spécifie un format de distribution pour les collections de code Java et les ressources associées. Il spécifie également un dépôt pour stocker ces collections, ou modules , et indique comment les découvrir, les charger et vérifier leur intégrité. Il inclut des fonctionnalités telles que les espaces de noms afin de corriger certaines lacunes du format JAR existant , notamment le « JAR Hell » , qui peut entraîner des problèmes de chemin de classe et de chargement de classes.

Le système de modules Java était initialement développé dans le cadre du processus communautaire Java sous le nom de JSR 277 et devait être publié avec Java 7.

La JSR 277 a ensuite été mise en suspens et le projet Jigsaw a été créé pour modulariser le JDK. Cette JSR a été remplacée par la JSR 376 (Java Platform Module System).

Le projet Jigsaw était initialement prévu pour Java 7 (2011), mais a été reporté à Java 8 (2014) dans le cadre du plan B, puis à une nouvelle version de Java 9 en 2017. Java 9, incluant le système de modules Java, a été publié le 21 septembre 2017.

JEP et JSR (Java Specification Request) suivants :

  • JEP 200 : Le JDK modulaire : Définir une structure modulaire pour le JDK
  • JEP 201 : Code source modulaire : Réorganiser le code source du JDK en modules, améliorer le système de compilation pour compiler les modules et imposer des limites aux modules lors de la compilation.
  • JEP 220 : Images d’exécution modulaires : Restructurer les images d’exécution du JDK et du JRE pour prendre en charge les modules et améliorer les performances, la sécurité et la maintenabilité
  • JEP 261 : Système de modules : Implémentation du système de modules de la plateforme Java
  • JEP 282 : Le lien Java : Créer un outil capable d'assembler et d'optimiser un ensemble de modules et leurs dépendances dans une image d'exécution personnalisée
  • JSR 376 : Système de modules de plateforme Java

De plus, plusieurs autres fonctionnalités de JDK 9 ont été ajoutées pour faciliter la transition vers le système de modules :

  • JEP 238 : Fichiers JAR multiversions : Étendre le format de fichier JAR pour permettre à plusieurs versions de fichiers de classe, spécifiques à une version de Java, de coexister dans une seule archive.
  • JEP 253 : Préparer les contrôles d’interface utilisateur JavaFX et les API CSS à la modularisation : définir des API publiques pour les fonctionnalités JavaFX actuellement disponibles uniquement via des API internes et qui deviendraient inaccessibles en raison de la modularisation.
  • JEP 260 : Encapsuler la plupart des API internes : Rendre la plupart des API internes du JDK inaccessibles par défaut, mais laisser accessibles quelques API internes critiques et largement utilisées, jusqu’à ce que des solutions de remplacement prises en charge existent pour la totalité ou la majeure partie de leurs fonctionnalités.
  • JEP 275 : Packaging modulaire des applications Java : Le packager Java évoluera pour JDK 9, en prenant en compte les modules, ce qui permettra par exemple de packager un module et tous les modules dont il dépend.

Propriétés des modules

Les modules servent à regrouper les paquets et à contrôler précisément ceux qui appartiennent à l'API publique. Contrairement aux fichiers JAR , les modules déclarent explicitement leurs dépendances et les paquets qu'ils exportent. Ces déclarations de dépendances explicites améliorent l'intégrité du code en facilitant la compréhension des applications de grande envergure et des dépendances entre les composants logiciels.

La déclaration du module est placée dans un fichier nommé module-info.java à la racine de l'arborescence des fichiers sources du module. Le JDK vérifie les dépendances et les interactions entre les modules à la compilation et à l'exécution.

Par exemple, la déclaration de module suivante indique que le module org.wikipedia.bardépend d'un autre org.wikipedia.bazmodule et exporte les packages suivants : org.wikipedia.bar.alphaetorg.wikipedia.bar.beta :

module org.wikipedia.bar { nécessite org.wikipedia.baz; exportations org.wikipedia.bar.alpha; exportations org.wikipedia.bar.beta; }

Les membres publics des org.wikipedia.bar.alphapackages org.wikipedia.bar.betaseront accessibles par les modules dépendants. Les membres privés sont inaccessibles, même par réflexion . Notez que dans les versions Java 9 à 16, la permission de cet « accès illégal » dépend d'un paramètre de ligne de commande.

Le JDK lui-même a été modularisé dans Java 9. [ exemple, la majorité de la bibliothèque standard Java est exportée par le module java.base.

Depuis Java 25, les modules peuvent être importés directement, ce qui emporte automatiquement tous les packages exportés. Cela se fait à l'aide de `import` import module. Par exemple, `import` est équivalent à `import` ., "Orange" , "Yellow" , "Green" , "Blue" , ​​"Indigo" , "Violet" ); IO . println ( MessageFormat . format ( "My favourite colour is {0} and today is {1,date,long}" , colours . get ( ThreadLocalRandom . current (). nextInt ( colours . size ())), new Date () )); } }

Les modules utilisent les mots-clés suivants :

  • exports: utilisé dans une déclaration de module pour spécifier quels paquets sont disponibles pour les autres modules
  • module: déclare un module
  • open: indique que toutes les classes d'un package sont accessibles par réflexion par d'autres modules
  • opens: utilisé pour ouvrir un paquet spécifique pour la réflexion vers d'autres modules
  • provides: utilisé pour déclarer qu'un module fournit une implémentation d'une interface de service
  • requires: utilisé dans une déclaration de module pour spécifier que le module dépend d'un autre module
  • to: utilisé avec la opensdirective pour spécifier quel module est autorisé à accéder par réflexion au package
  • transitive: utilisé avec la requiresdirective pour indiquer qu'un module non seulement requiert un autre module, mais rend également les dépendances de ce module disponibles aux modules qui en dépendent.
  • uses: utilisé dans un module pour déclarer que le module utilise un service (c'est-à-dire qu'il consommera un service fourni par d'autres modules)
  • with: utilisé avec la providesdirective pour spécifier quelle implémentation d'un service est fournie par le module

Modules standard

Modules de base

Les modules de l'espace de noms java.*appartiennent à la plateforme Java, édition standard , et les modules de l'espace de noms jdk.*appartiennent au kit de développement Java .

NomDescription
des annotations Java et au compilateur Java .
Abstract Window Toolkit (AWT) et Swing pour les interfaces utilisateur, ainsi que les API pour l'accessibilité, l'audio, l'imagerie, l'impression et JavaBeans .
machine virtuelle Java (JVM).
la journalisation des événements dans les applications Java (API de journalisation Java).
Java Management Extensions (JMX).
d'invocation de méthode à distance (RMI) pour l'API distante des extensions de gestion Java (JMX).
Java Naming and Directory Interface (JNDI).
le client HTTP et la fonctionnalité WebSocket .
des moteurs de script dans les applications Java (API de script).
API des services de sécurité génériques (GSS-API) de l' IETF pour les contextes de sécurité.
Simple Authentication and Security Layer ).
à carte à puce (API d'E/S de carte à puce Java).
Java Database Connectivity (JDBC) pour l'interaction avec les bases de données.
API Java pour le traitement XML (JAXP), y compris les outils d'analyse et de transformation des données XML.
les opérations cryptographiques avec des données XML.
des technologies d'assistance dans le JDK.
des jeux de caractères supplémentaires ( charsets ), y compris des jeux de caractères à double octet et spécifiques à IBM, non inclus dans .javac .
HotSpot .
Java Archive (JAR), tels que les commandes jar et jarsigner .
javadoc .
jconsole , pour la surveillance et la gestion des applications Java.
interface de débogage Java (JDI) pour le débogage des applications Java.
Java Debug Wire Protocol (JDWP) pour le débogage à distance.
JDK Flight Recorder (JFR) pour la collecte de données de performance et de diagnostic.
de packaging Java ( jpackage ) pour la création de packages d'applications spécifiques à la plateforme.
JavaScript dans des applications Java.
DNS Java pour la résolution des noms de domaine.
le protocole de transmission de contrôle de flux (SCTP) dans le JDK.
Document Object Model ) du W3C ( World Wide Web Consortium ) non couvert par Java SE. Exporte les packages situés en dehors de l' espace de noms (depuis ).javaorg.w3c.dom
fichiers ZIP en tant que systèmes de fichiers.

Le module jdk.unsupportedn'est pas un module officiel, mais il est souvent inclus dans le JDK, représentant les détails d'implémentation dans la bibliothèque standard Java . Il contient des packages dans l'espace de noms sun.*(qui contient la sun.misc.Unsafeclasse, utilisée pour manipuler le CPU et le matériel, gérer directement la mémoire, et d'autres choses) et com.sun.*des packages.

Jakarta EE , qui faisait autrefois partie de la bibliothèque standard Java, n'est pas modularisé ; cependant, les systèmes de construction peuvent générer des modules automatiques pour celui-ci.

Modules JavaFX

JavaFX était auparavant intégré au JDK de base, jusqu'à Java 11 où il a été séparé en OpenJFX. JavaFX est divisé en modules comme suit.

NomDescription
Swing pour le kit d'outils d'interface utilisateur JavaFX.
JavaScript .
OSGi (par exemple, le modèle de cycle de vie et le registre de services). Cependant, le JMS prendra en charge des fonctions non prises en charge par OSGi, telles que la modularité à la compilation et la prise en charge native des bibliothèques natives. Plusieurs articles explorant l'interopérabilité entre le JMS et OSGi ont été publiés en 2016. Ils sont disponibles sur InfoQ et sur le blog de l'OSGi Alliance.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index