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 contenga las partes de la plataforma Java realmente necesarias para las aplicaciones, 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 para las aplicaciones de escritorio o GUI.
Tradicionalmente, Oracle/Sun Microsystems generaba instaladores de Java Runtime Environment (JRE) que solo contenían las api de 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 applets y aplicaciones Java Web Start a través del explorador.
Con la llegada de los exploradores y las aplicaciones web modernas, 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 de tiempo de ejecución de Java de uso general preinstalado en los equipos se volvió menos importante a lo largo del tiempo. Con Java 9, applet API ha quedado en desuso (consulte JEP 289)y, con Java 17, la API se ha marcado para su eliminación, lo que significa que 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 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 para generar un entorno de ejecución de Java personalizado diseñado específicamente para ajustarse a las necesidades de las aplicaciones, para implementarse como un entorno de ejecución integrado integrado junto con el código de aplicación a menudo como parte de una imagen de contenedor para cargas de trabajo basadas en la jlink nube. o como parte de los instaladores para aplicaciones basadas en GUI.
En la actualidad, Minecraft: Java Edition se implementa en millones de Minecraft gamers con un entorno de ejecución de Java personalizado insertado en el juego. 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 su 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 JDK se puede usar para analizar un archivo, un directorio o un archivo para identificar las dependencias del módulo Java, las dependencias internas de JDK y otra información útil que ayudará a los desarrolladores a generar entornos de ejecución de jdeps.classJAR 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 indica que esta clase solo depende de los tipos de los paquetes y , por lo jdeps que solo necesita el módulo java.langjava.iojava.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.
Creación de un entorno de ejecución de Java con jlink
Para crear un entorno de ejecución de Java desde el JDK, debe saber qué módulos desea. Use jdeps para identificarlos. Para más información sobre la jlink herramienta de línea de comandos, consulte la documentación jlink.
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 aplicación dependiente del java.base módulo. La estructura de la carpeta producida por es similar a la estructura de directorios de JDK y la herramienta de línea de comandos para iniciar jvm se encuentra en la carpeta como javaruntimejlink de java./bin/ 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 la imagen. Vea cómo crear entornos de ejecución de Java mediante Docker.
Base de conocimiento
javax.net.ssl.SSLHandshakeException: se ha recibido una alerta irreconsono: handshake_failure
Al usar una biblioteca que intenta establecer una conexión segura, asegúrese de que el módulo jdk.crypto.ec se incluye en el entorno de ejecución de Java. Para más información, consulte kubernetes-client/java#893.
Recursos
Proporcionar comentarios sobre Microsoft Build de OpenJDK
Envíenos sus comentarios, opiniones e ideas para ayudarnos a mejorar Microsoft Build de OpenJDK. Visite nuestra página de discusión de OpenJDK GitHub para enviarnos sus comentarios.
Java y OpenJDK son marcas comerciales o marcas registradas de Oracle o sus filiales.