Mark Reinhold, principal arquitecto de Oracle de Java SE, ha publicado un documento con una primera especificación del sistema de módulos que va a incorporar la plataforma en la siguiente revisión mayor. Los módulos son mecanismos para especificar para un conjunto de paquetes qué clases de entre las definidas públicas en esos paquetes se van a exportar. Podemos verlo como una forma de definir una interfaz para un conjunto de paquetes.
A menudo dentro de la plataforma Java sucede que una librería internamente se organiza en paquetes, y para poder usar una clase desde otro paquete de la misma librería esa clase tiene que hacerse pública. Sin embargo, el creador de la librería no tenía intención de que esa clase formase parte de la interfaz de su librería. Esa clase era un detalle de implementación. Pero al hacerla pública es posible emplearla desde fuera del código de la librería. El sistema de módulos pretende resolver este problema. Además, pretende permitir definir de un modo modular los componentes del JDK, permitiendo crear JRE que no incluyan todas las partes de la plataforma y sean más ligeros.
A continuación vamos a hacer un pequeño resumen del documento publicado por Mark.
Definición de módulos
Un módulo debe declarar que otros módulos requiere para poder ser compilado y para ejecutarse. También debe declarar que paquetes dentro del módulo son exportados como su interfaz. Por ejemplo:
module com.foo.bar {
requires com.foo.baz;
com.foo.bar.alpha;
com.foo.bar.beta;
}
Click to read more ...