Descripción

El Java Platform Module System (JPMS) se introdujo en Java 9 y le permite organizar su código agrupando un conjunto de paquetes relacionados en componentes de nivel superior llamados módulos y proporciona un mecanismo para declarar dependencias entre módulos.


Modularizar su aplicación ofrece varios beneficios:

 - Una aplicación cuyo código está organizado en módulos es más fácil de leer, más fácil de mantener y más escalable.

 - Las dependencias entre módulos se definen mediante descriptores de módulo que se verifican en el momento de la compilación y cuando se inicia la aplicación. Esta resolución temprana de dependencias ayuda a mejorar la confiabilidad del tiempo de ejecución, superando un problema de larga data en Java donde las excepciones "NoClassDefFoundError" eran causas comunes de bloqueos en las aplicaciones.

 - Los paquetes de un módulo son accesibles para otros módulos solo si se exportan explícitamente. Este principio, llamado encapsulamiento sólido, proporciona de forma predeterminada un espacio seguro para el código en el que la reflexión no puede invadir.

 - Finalmente, el sistema de módulos le permite crear imágenes de tiempo de ejecución personalizadas que contienen solo los módulos utilizados por su aplicación. El tamaño reducido del entorno de ejecución mejora notablemente el tiempo de inicio y el uso de memoria de la aplicación.


A partir de la versión 3.5.55, el archivo wrapper.jar contiene un descriptor de módulo que presenta el módulo 'org.tanukisoftware.wrapper'. Este módulo con nombre se puede incluir en imágenes de tiempo de ejecución personalizadas creadas con jlink.

ADVERTENCIA

Antes de la versión 3.5.55, wrapper.jar no era modular. Cuando se hace referencia en la ruta del módulo, se crea un módulo automático llamado 'wrapper' (derivado del nombre del archivo JAR). Este módulo automático podría usarse en otras declaraciones de módulo, pero jlink no podría usarlo para crear imágenes en tiempo de ejecución.

Si se utilizó 'wrapper' en algunos de los descriptores de su módulo y actualiza a la versión 3.5.55 o superior del Wrapper, no olvide cambiar el nombre a 'org.tanukisoftware.wrapper'.


El Wrapper proporciona varias propiedades para ayudarle a configurar cómo su aplicación utiliza módulos:

NOTA

Estas propiedades sólo se utilizan cuando se ejecutan con versiones de Java 9 o superiores. Serán ignoradas en versiones anteriores.

wrapper.java.module_path.<n>

Compatibilidad :3.5.55, Requiere Java 9+
Ediciones :Edición ProfesionaEdición EstándarEdición de la Comunidad
Plataformas :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/OSIBM z/Linux

Estas propiedades se utilizan para enumerar ubicaciones donde se pueden encontrar los módulos de su aplicación. La lista puede contener directorios o rutas a archivos jar que, opcionalmente, contienen comodines en la parte del nombre del archivo.

El Wrapper utilizará esta lista para crear la opción '--module-path' de la línea de comandos de Java.

Si se utiliza un carácter comodín dentro de una entrada de ruta del módulo, todos los archivos coincidentes se agregarán a la ruta de módulo utilizada al iniciar una instancia de JVM.

Los caracteres comodín válidos son:

  • Un carácter '*', que coincidirá con "0" (cero) o más caracteres.
  • Un carácter '?', que coincidirá exactamente con un carácter.

Ejemplos de valores posibles para elementos de rutas de módulo:
wrapper.java.module_path.1=../lib/myapp-*.jar  # archivos jar especificados con un comodín'
wrapper.java.module_path.2=../lib/tools.jar    # single jar file specified using the exact name
wrapper.java.module_path.3=../lib/ext          # folder where additional modules can be found

NOTA

El archivo wrapper.jar no debe incluirse en los valores de esta lista de propiedades. Si está presente, se eliminará de la lista al cargar la configuración.

El Wrapper usa la propiedad wrapper.jarfile para agregar automáticamente el archivo wrapper.jar en el lugar correcto en la línea de comandos dependiendo de si se usan módulos o no.


Classpath:

Java no permite que dos archivos jar distintos que contengan el mismo paquete coexistan en la lista de rutas de módulo. Este no es el caso con classpath, donde históricamente siempre se ha permitido la superposición de paquetes. Esta es una de las razones por las que classpath sigue siendo útil, al menos hasta que una aplicación pueda migrarse completamente al sistema de módulos Java 9.

Tenga en cuenta la siguiente limitación: los archivos jar enumerados en el classpath que no se pueden encontrar en ninguna ubicación de la ruta de módulo serán utilizados por la JVM como un módulo sin nombre, lo que por naturaleza lo hace inaccesible para cualquier otro módulo. Si se supone que se hace referencia a un módulo en una directiva requires de otro módulo, debe existir en una de las ubicaciones especificadas por las propiedades wrapper.java.module_path.<n> o wrapper.java.upgrade_module_path.<n>.


Problemas?

Si encuentra algún problema relacionado con la ruta del módulo, lo primero que debe hacer es verificar la ruta del módulo completa que genera el Wrapper. Para hacer esto, habilite la salida del registro de depuración con la propiedad wrapper.debug o habilite la visualización del comando Java usando la propiedad wrapper.java.command.loglevel.

NOTA

Ruta del módulo que contiene espacios:

El Wrapper manejará correctamente los elementos de la ruta del módulo que contengan espacios. Esto lo hace más tarde el Wrapper poniendo entre comillas la ruta final del módulo generado. Los valores de propiedad de los elementos de ruta de módulo individuales nunca deben definirse que contengan comillas, incluso si contienen espacios.

wrapper.java.module_path.missing.loglevel

Compatibilidad :3.5.55, Requiere Java 9+
Ediciones :Edición ProfesionaEdición EstándarEdición de la Comunidad
Plataformas :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/OSIBM z/Linux

De forma predeterminada, el Wrapper registrará advertencias sobre cualquier elemento faltante de la ruta de módulo en el nivel de registro DEBUG. Es bastante común querer ver estos mensajes de registro generados sin habilitar también todos los resultados de depuración. Esta propiedad permite especificar el nivel de registro en el que se registrarán las advertencias.

Los valores válidos de la propriedad incluyen:
  • FATAL :
    para registrar en el nivel de registro FATAL.
  • ERROR :
    para registrar en el nivel de registro ERROR.
  • WARN :
    para registrar en el nivel de registro WARN.
  • STATUS :
    para registrar en el nivel de registro STATUS.
  • INFO :
    para registrar en el nivel de registro INFO.
  • DEBUG :
    para registrar en el nivel de registro DEBUG.
  • NONE :
    seleccione X para no registrar nunca.

El valor predeterminado es DEBUG.

Example:
wrapper.java.module_path.missing.loglevel=DEBUG

Si a su aplicación a menudo le faltan archivos jar, configurar este valor en NONE deshabilitará las advertencias en cualquier nivel de registro.

Los elementos de Ruta de Módulo que se definen como comodines también registrarán una advertencia si el comodín no coincide con al menos un archivo. Esto puede suceder si el directorio no existe o está vacío.

wrapper.java.upgrade_module_path.<n>

Compatibilidad :3.5.55, Requiere Java 9+
Ediciones :Edición ProfesionaEdición EstándarEdición de la Comunidad
Plataformas :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/OSIBM z/Linux

Estas propiedades definen una lista similar a wrapper.java.module_path.<n>, pero permiten anular los módulos actualizables contenidos en la imagen de tiempo de ejecución.

Al igual que para wrapper.java.module_path.<n>, la lista puede contener directorios o rutas a archivos jar que opcionalmente contienen comodines en la parte del nombre del archivo. Para obtener más detalles sobre la sintaxis, consulte la sección anterior.

El Wrapper utilizará esta lista para construir la opción '--upgrade-module-path' de la línea de comandos de Java.

NOTA

No es necesario incluir wrapper.jar en los valores de esta lista de propiedades.

El Wrapper utiliza la propiedad wrapper.jarfile para agregar automáticamente wrapper.jar en el lugar correcto en la línea de comando dependiendo de si se utilizan módulos o no.

wrapper.java.upgrade_module_path.missing.loglevel

Compatibilidad :3.5.55, Requiere Java 9+
Ediciones :Edición ProfesionaEdición EstándarEdición de la Comunidad
Plataformas :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/OSIBM z/Linux

De forma predeterminada, el Wrapper registrará advertencias sobre cualquier elemento faltante en la ruta del módulo de actualización en el nivel de registro DEBUG. Es bastante común querer ver estos mensajes de registro generados sin habilitar también toda la salida de depuración. Esta propiedad permite especificar el nivel de registro en el que se registrarán las advertencias.

Los valores válidos de la propriedad incluyen:
  • FATAL :
    para registrar en el nivel de registro FATAL.
  • ERROR :
    para registrar en el nivel de registro ERROR.
  • WARN :
    para registrar en el nivel de registro WARN.
  • STATUS :
    para registrar en el nivel de registro STATUS.
  • INFO :
    para registrar en el nivel de registro INFO.
  • DEBUG :
    para registrar en el nivel de registro DEBUG.
  • NONE :
    para no registrar nunca.

El valor predeterminado es DEBUG.

Example:
wrapper.java.upgrade_module_path.missing.loglevel=DEBUG

Si a su aplicación a menudo le faltan archivos jar, configurar este valor en NONE deshabilitará las advertencias en cualquier nivel de registro.

Los elementos de ruta del módulo de actualización que se definen como comodines también registrarán una advertencia si el comodín no coincide con al menos un archivo. Esto puede suceder si el directorio no existe o está vacío.

wrapper.java.module.<n>

Compatibilidad :3.5.55, Requiere Java 9+
Ediciones :Edición ProfesionaEdición EstándarEdición de la Comunidad
Plataformas :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/OSIBM z/Linux

Estas propiedades se utilizan para enumerar los nombres de los módulos raíz utilizados por su aplicación. Los módulos raíz son módulos que no se pueden extraer en el gráfico de módulos cuando se inicia la aplicación, ya sea porque no son requeridos por ningún otro módulo o porque son dependencias opcionales (es decir, se especifican con 'requires static' en un descriptor de módulo).

El Wrapper utilizará esta lista para crear la opción '--add-modules' de la línea de comando.

Además de los nombres de los módulos, la lista puede incluir los siguientes tokens:

Consulte la especificación de JDK para obtener una descripción más detallada.