Java Language
Módulos
Buscar..
Sintaxis
- requiere java.xml;
- requiere java.xml público; # expone el módulo a dependientes para su uso
- exportaciones com.example.foo; # dependientes pueden usar tipos públicos en este paquete
- exporta com.example.foo.impl a com.example.bar; # restringir el uso a un módulo
Observaciones
Se recomienda el uso de módulos, pero no es obligatorio, esto permite que el código existente continúe trabajando en Java 9. También permite una transición gradual al código modular.
Cualquier código no modular se coloca en un módulo sin nombre cuando se compila. Este es un módulo especial que puede usar tipos de todos los demás módulos pero solo de paquetes que tienen una declaración de exports
.
Todos los paquetes en el módulo sin nombre se exportan automáticamente.
Las palabras clave, por ejemplo, el module
etc., tienen un uso restringido dentro de la declaración del módulo, pero se pueden seguir utilizando como identificadores en otros lugares.
Definiendo un módulo básico.
Los módulos se definen en un archivo llamado module-info.java
, denominado descriptor de módulo. Debe colocarse en la raíz del código fuente:
|-- module-info.java
|-- com
|-- example
|-- foo
|-- Foo.java
|-- bar
|-- Bar.java
Aquí hay un descriptor de módulo simple:
module com.example {
requires java.httpclient;
exports com.example.foo;
}
El nombre del módulo debe ser único y se recomienda que use la misma notación de nombres de DNS inverso que utilizan los paquetes para garantizar esto.
El módulo java.base
, que contiene las clases básicas de Java, está visible de forma implícita en cualquier módulo y no necesita ser incluido.
La declaración de requires
nos permite utilizar otros módulos, en el ejemplo se importa el módulo java.httpclient
.
Un módulo también puede especificar qué paquetes exports
y, por lo tanto, lo hace visible para otros módulos.
El paquete com.example.foo
declarado en la cláusula de exports
será visible para otros módulos. Cualquier com.example.foo
de com.example.foo
no se exportará, necesitan sus propias declaraciones de export
.
A la inversa, com.example.bar
, que no figura en las cláusulas de exports
, no será visible para otros módulos.