Java Language
Modules
Recherche…
Syntaxe
- nécessite java.xml;
- nécessite public java.xml; # expose le module aux dépendants pour utilisation
- exportations com.example.foo; # dépendants peuvent utiliser les types publics dans ce paquet
- exporte com.example.foo.impl vers com.example.bar; # restreindre l'utilisation à un module
Remarques
L'utilisation des modules est encouragée mais n'est pas obligatoire, cela permet au code existant de continuer à fonctionner en Java 9. Il permet également une transition progressive vers du code modulaire.
Tout code non modulaire est placé dans un module sans nom lorsqu'il est compilé. C'est un module spécial capable d'utiliser des types de tous les autres modules, mais uniquement à partir de packages qui ont une déclaration d' exports
.
Tous les paquets du module sans nom sont exportés automatiquement.
Les mots-clés, par exemple, module
etc ..., sont restreints dans la déclaration de module mais peuvent continuer à être utilisés comme identificateurs ailleurs.
Définir un module de base
Les modules sont définis dans un fichier nommé module-info.java
, nommé descripteur de module. Il doit être placé dans la racine du code source:
|-- module-info.java
|-- com
|-- example
|-- foo
|-- Foo.java
|-- bar
|-- Bar.java
Voici un descripteur de module simple:
module com.example {
requires java.httpclient;
exports com.example.foo;
}
Le nom du module doit être unique et il est recommandé d'utiliser la même notation de nommage Reverse-DNS que celle utilisée par les packages pour garantir cela.
Le module java.base
, qui contient les classes de base de Java, est implicitement visible par tous les modules et n'a pas besoin d'être inclus.
La requires
déclaration nous permet d'utiliser d' autres modules, dans l'exemple le module java.httpclient
est importé.
Un module peut également spécifier les paquets qu'il exports
et le rend donc visible aux autres modules.
Le package com.example.foo
déclaré dans la clause exports
sera visible par les autres modules. Les sous-packages de com.example.foo
ne seront pas exportés, ils ont besoin de leurs propres déclarations d' export
.
À l'inverse, com.example.bar
qui n'est pas répertorié dans exports
clauses exports
ne sera pas visible par les autres modules.