stringtranslate.com

Sistema de módulos de la plataforma Java

El sistema de módulos de la plataforma Java [1] especifica un formato de distribución para colecciones de código Java y recursos asociados. También especifica un repositorio para almacenar estas colecciones, o módulos , e identifica cómo se pueden descubrir, cargar y comprobar en cuanto a su integridad. Incluye características como espacios de nombres con el objetivo de corregir algunas de las deficiencias del formato JAR existente , especialmente el JAR Hell , que puede provocar problemas como problemas de carga de clases y rutas de clases.

El sistema de módulos Java se desarrolló inicialmente bajo el Proceso de la Comunidad Java como JSR 277 y estaba previsto que se lanzara con Java 7.

Posteriormente, se suspendió la JSR 277 y se creó el Proyecto Jigsaw [2] para modularizar el JDK. Esta JSR fue reemplazada por la JSR 376 (Java Platform Module System).

El proyecto Jigsaw fue originalmente pensado para Java 7 (2011), pero fue pospuesto para Java 8 (2014) como parte del Plan B, [3] y nuevamente pospuesto para un lanzamiento de Java 9 en 2017. [4] Java 9, incluido el sistema de módulos Java, fue lanzado el 21 de septiembre de 2017. [5]

Arquitectura

El sistema de módulos Java implementado en Java 9 incluye los siguientes JEP y JSR (solicitud de especificación Java) : [2]

Además, se han agregado varias otras características del JDK 9 para facilitar la transición al sistema de módulos:

Propiedades de los módulos

Los módulos son una nueva forma de agrupar código. A diferencia de los archivos Jar , los módulos declaran explícitamente de qué módulos dependen y qué paquetes exportan. [12] Las declaraciones de dependencia explícitas mejoran la integridad del código, al facilitar el razonamiento sobre aplicaciones grandes y las dependencias entre componentes de software.

La declaración del módulo se coloca en un archivo llamado module-info.java en la raíz de la jerarquía de archivos fuente del módulo. El JDK verificará las dependencias e interacciones entre los módulos tanto en tiempo de compilación como en tiempo de ejecución.

Por ejemplo, la siguiente declaración de módulo declara que el módulo com.foo.bar depende de otro módulo com.foo.baz y exporta los siguientes paquetes: com.foo.bar.alpha y com.foo.bar.beta :

módulo com.foo.bar { requiere com.foo.baz; exporta com.foo.bar.alpha; exporta com.foo.bar.beta;}

Los miembros públicos de los paquetes com.foo.bar.alpha y com.foo.bar.beta serán accesibles para los módulos dependientes. Los miembros privados son inaccesibles incluso a través de un medio como la reflexión . Tenga en cuenta que en las versiones de Java 9 a 16, si dicho "acceso ilegal" está permitido de facto depende de una configuración de la línea de comandos. [13]

El propio JDK ha sido modularizado en Java 9. [ 14]

Enlaces con OSGi

El sistema de módulos Java no pretende soportar todas las funcionalidades que la plataforma OSGi actualmente soporta (por ejemplo, el modelo de ciclo de vida y el registro de servicios). Sin embargo, el sistema de módulos Java soportará funciones que no son soportadas por OSGi, como la modularidad en tiempo de compilación y el soporte integrado para bibliotecas nativas. [15] En 2016 se publicaron un par de artículos que exploraban cómo el sistema de módulos Java y OSGi podrían interoperar. Estos se pueden encontrar en InfoQ [16] y también en el blog de OSGi Alliance. [17]

Véase también

Referencias

  1. ^ "Sistema de módulos de la plataforma Java (JSR 376)". Oracle Corporation . Consultado el 2 de julio de 2018 .
  2. ^ ab "Proyecto Jigsaw". Oracle Corporation . Consultado el 29 de noviembre de 2015 .
  3. ^ Mark Reinhold (20 de septiembre de 2009). "Es hora de... Plan B". Oracle Corporation . Consultado el 21 de junio de 2017 .
  4. ^ "JDK 9". Oracle Corporation . Consultado el 24 de febrero de 2016 .
  5. ^ "Java 9: ​​fecha de lanzamiento y nuevas características". techworld.com. 2017-07-21 . Consultado el 2017-11-18 .
  6. ^ "jlink: El enlazador de Java (JSR 282)". Oracle Corporation . Consultado el 12 de marzo de 2016 .
  7. ^ "Sistema de módulos de la plataforma Java (JSR 376)". Oracle Corporation . Consultado el 29 de noviembre de 2015 .
  8. ^ "JEP 238: Archivos JAR de múltiples versiones". Oracle Corporation . Consultado el 31 de julio de 2017 .
  9. ^ "JEP 253: Preparar controles de interfaz de usuario de JavaFX y API CSS para la modularización". Oracle Corporation . Consultado el 31 de julio de 2017 .
  10. ^ "JEP 260: Encapsular la mayoría de las API internas". Oracle Corporation . Consultado el 31 de julio de 2017 .
  11. ^ "JEP 275: Empaquetado modular de aplicaciones Java". Oracle Corporation . Consultado el 31 de julio de 2017 .
  12. ^ Mark Reinhold (8 de marzo de 2016). "El estado del sistema de módulos". Oracle Corporation . Consultado el 18 de febrero de 2017 .
  13. ^ "JEP 396: Encapsular fuertemente los componentes internos del JDK de manera predeterminada" . Consultado el 6 de febrero de 2021 .
  14. ^ "Resumen del módulo JDK". Oracle Corporation . 24 de junio de 2016. Archivado desde el original el 8 de diciembre de 2015. Consultado el 18 de febrero de 2017 .
  15. ^ Mark Reinhold (24 de agosto de 2012). "Project Jigsaw: Late to the train: The Q&A" (Proyecto Jigsaw: Tarde para el tren: Preguntas y respuestas). Oracle Corporation . Consultado el 29 de noviembre de 2015 .
  16. ^ "Java 9, OSGi y el futuro de la modularidad". InfoQ . Consultado el 26 de septiembre de 2016 .
  17. ^ "Capas de módulos Java y paquetes OSGi". OSGi Alliance . Consultado el 1 de agosto de 2016 .

Enlaces externos