stringtranslate.com

Sistema de módulo de plataforma Java

El Java Platform Module System [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 verificar su integridad. Incluye características como espacios de nombres con el objetivo de solucionar algunas de las deficiencias del formato JAR existente , especialmente el JAR Hell , que puede provocar problemas como classpath y problemas de carga de clases.

El sistema de módulos Java se desarrolló inicialmente bajo el proceso de la comunidad Java como JSR 277 y su lanzamiento estaba programado para Java 7.

Posteriormente, JSR 277 quedó en suspenso y se creó el Proyecto Jigsaw [2] para modularizar el JDK. Este JSR fue reemplazado por JSR 376 (Java Platform Module System).

Project Jigsaw se diseñó originalmente para Java 7 (2011), pero se pospuso a Java 8 (2014) como parte del Plan B, [3] y nuevamente se pospuso a una versión 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 de Java) : [2]

Además, se han agregado varias otras características de 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 hacer que sea más fácil razonar 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 del archivo fuente del módulo. El JDK verificará las dependencias e interacciones entre 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 mediante módulos dependientes. Los miembros privados son inaccesibles incluso a través de medios como la reflexión . Tenga en cuenta que en las versiones 9 a 16 de Java , si dicho "acceso ilegal" está permitido de facto depende de la configuración de la línea de comando. [13]

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

Enlaces con OSGi

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

Ver también

Referencias

  1. ^ "Sistema de módulo de plataforma Java (JSR 376)". Corporación Oráculo . Consultado el 2 de julio de 2018 .
  2. ^ ab "Proyecto Rompecabezas". Corporación Oráculo . Consultado el 29 de noviembre de 2015 .
  3. ^ Mark Reinhold (20 de septiembre de 2009). "Es hora de... el Plan B". Corporación Oráculo . Consultado el 21 de junio de 2017 .
  4. ^ "JDK 9". Corporación Oráculo . Consultado el 24 de febrero de 2016 .
  5. ^ "Java 9: ​​fecha de lanzamiento y nuevas funciones". techworld.com. 2017-07-21 . Consultado el 18 de noviembre de 2017 .
  6. ^ "jlink: el vinculador de Java (JSR 282)". Corporación Oráculo . Consultado el 12 de marzo de 2016 .
  7. ^ "Sistema de módulo de plataforma Java (JSR 376)". Corporación Oráculo . Consultado el 29 de noviembre de 2015 .
  8. ^ "JEP 238: archivos JAR de versiones múltiples". Corporación Oráculo . Consultado el 31 de julio de 2017 .
  9. ^ "JEP 253: Prepare los controles de interfaz de usuario de JavaFX y las API de CSS para la modularización". Corporación Oráculo . Consultado el 31 de julio de 2017 .
  10. ^ "JEP 260: encapsule la mayoría de las API internas". Corporación Oráculo . Consultado el 31 de julio de 2017 .
  11. ^ "JEP 275: Empaquetado de aplicaciones Java modulares". Corporación Oráculo . Consultado el 31 de julio de 2017 .
  12. ^ Mark Reinhold (8 de marzo de 2016). "El estado del sistema de módulos". Corporación Oráculo . Consultado el 18 de febrero de 2017 .
  13. ^ "JEP 396: Encapsular fuertemente los componentes internos de JDK de forma predeterminada" . Consultado el 6 de febrero de 2021 .
  14. ^ "Resumen del módulo JDK". Corporación Oráculo . 2016-06-24. 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). "Proyecto Jigsaw: Tarde para el tren: Preguntas y respuestas". Corporación Oráculo . 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". Alianza OSGi . Consultado el 1 de agosto de 2016 .

enlaces externos