Entornos de ejecución de Java con jlink

Microsoft reconoce y admite la adopción de entornos de ejecución de Java personalizados diseñados para necesidades específicas de la aplicación, en lugar del uso de entornos de ejecución de Java de uso general. Este método de implementación de Java garantiza que el entorno de ejecución de Java solo contiene las partes de la plataforma Java que realmente necesitan las aplicaciones, por lo que aumenta la seguridad, reduce el tamaño de la implementación y mejora el rendimiento, tanto para las aplicaciones java basadas en la nube como en el servidor, así como en las aplicaciones de escritorio o GUI.

Tradicionalmente, Oracle/Sun Microsystems produciría instaladores de Java Runtime Environment (JRE), que solo contendrán la máquina virtual Java, las API de Java y las integraciones específicas del sistema operativo y del explorador, destinadas a habilitar equipos para ejecutar aplicaciones Java descargadas desde Internet, o para ejecutar aplicaciones Applets y Java Web Start a través del explorador.

Con la llegada de aplicaciones web y exploradores modernos, las tecnologías Applets y Java Web Start han quedado en desuso y los exploradores ya no admiten complementos de Java. La necesidad de un entorno en tiempo de ejecución de Java de uso general preinstalado en los equipos se convirtió en menos significativo durante el tiempo extra. Con Java 9, la API de Applet ha quedado en desuso (consulte JEP 289) y con Java 17, la API se marcó para su eliminación, lo que significa que ciertamente se quitará en una versión futura de Java.

Otro cambio significativo es la modularización de Java, que también se inició con la versión de Java 9 (consulte JSR 376). Como parte de este cambio, los desarrolladores ahora pueden usar una línea de comandos recién agregada en el JDK llamada jlink para generar un entorno de ejecución de Java personalizado diseñado específicamente para adaptarse a las necesidades de las aplicaciones, para implementarse como un entorno de ejecución incrustado integrado junto con el código de la aplicación a menudo veces como parte de una imagen de contenedor para cargas de trabajo basadas en la nube, o como parte de los instaladores para aplicaciones basadas en GUI.

En la actualidad, Minecraft: Java Edition se implementa en millones de jugadores de Minecraft con un tiempo de ejecución de Java personalizado insertado en el juego. Detrás de servicios en línea como LinkedIn, Yammer, Bing y Azure, Microsoft también implementa cientos de miles de JVM mediante esta técnica.

Creación de un entorno de ejecución de Java personalizado

Para crear un entorno de ejecución de Java, debe tener JDK 9 o posterior instalado en el entorno. Descargue e instale primero Microsoft Build de OpenJDK.

Identificación de los módulos necesarios con jdeps

La plataforma Java ahora está segmentada en módulos. Consulte la documentación de Java 17 para obtener una lista completa; otras versiones de Java pueden incluir nuevos módulos.

La herramienta jdeps JDK se puede usar para analizar un .class archivo, un directorio o un JAR archivo, para identificar las dependencias del módulo de Java, las dependencias internas de JDK y otra información útil que ayudará a los desarrolladores a generar entornos de ejecución de Java.

$ cat HelloWorld.java
public class HelloWorld {
  public static void main(String args[]) {
    System.out.println("Hello World!");
  }
}

$ jdeps HelloWorld.class
HelloWorld.class -> java.base
   <unnamed>                                          -> java.io                                            java.base
   <unnamed>                                          -> java.lang                                          java.base

La herramienta jdeps indica que esta clase solo depende de los tipos de java.lang los paquetes y java.io , por lo tanto, solo necesita el módulo java.base. Se produciría una salida similar para un JAR archivo como entrada. Con una lista de los módulos necesarios, ahora puede crear un entorno de ejecución de Java.

Para crear un entorno de ejecución de Java desde el JDK, debe saber qué módulos desea. Use jdeps para identificarlos. Para obtener más información sobre la jlink herramienta de línea de comandos, consulte la documentación.

Ejemplo:

$ jlink \
         --add-modules java.base \
         --strip-debug \
         --no-man-pages \
         --no-header-files \
         --compress=2 \
         --output /javaruntime

Ahora puede usar el entorno de ejecución de Java ubicado en /javaruntime para ejecutar el código de la aplicación dependiente del java.base módulo. La estructura de la javaruntime carpeta generada por jlink es similar a la estructura del directorio JDK y la java herramienta de línea de comandos para iniciar la JVM, se encuentra en la ./bin/ carpeta como de costumbre. Dado que un entorno de ejecución de Java personalizado contiene todos los módulos necesarios de una aplicación existente, se puede hacer referencia a él mediante JAVA_HOME.

$ /javaruntime/bin/java HelloWorld
Hello, World!

En el ejemplo anterior, el entorno de ejecución de Java generado en Windows consume aproximadamente 24 MB en Windows.

Creación de un entorno de ejecución de Java con una imagen de contenedor de Docker

Puede usar compilaciones de varias fases de Docker para crear, consumir y empaquetar el entorno de ejecución de Java personalizado como parte de la compilación de imágenes. Consulte cómo crear entornos de ejecución de Java mediante Docker.

Base de conocimiento

javax.net.ssl.SSLHandshakeException: alerta irrecuperable recibida: handshake_failure

Visite Seguridad y criptografía de Java para obtener una explicación sobre cómo corregir este problema.

Recursos

Proporcionar comentarios sobre Microsoft Build of OpenJDK

Envíenos sus comentarios, pensamientos e ideas para ayudarnos a mejorar Microsoft Build of OpenJDK. Visite nuestra página de discusiones de OpenJDK en GitHub para enviarnos sus comentarios.

Java y OpenJDK son marcas comerciales o marcas registradas de Oracle o sus filiales.