Compartilhar via


Runtimes do Java com jlink

A Microsoft reconhece e dá suporte à adoção de runtimes Java personalizados, criados para necessidades específicas de aplicativos, em vez do uso de runtimes Java de uso geral. Esse método de implantação do Java garante que o runtime do Java contenha apenas as partes da plataforma Java que são realmente necessárias aos aplicativos, aumentando a segurança, reduzindo o tamanho da implantação e melhorando o desempenho, tanto para aplicativos Java baseados em nuvem e em servidor quanto para aplicativos de área de trabalho/GUI.

Tradicionalmente, a Oracle/Sun Microsystems produzia instaladores do Java Runtime Environment (JRE) que continham apenas a máquina virtual Java, as APIs Java e as integrações específicas do sistema operacional e do navegador, com o objetivo de permitir que os computadores executassem aplicativos Java baixados da Internet ou executassem Applets e aplicativos Java Web Start por meio do navegador.

Com o advento dos modernos aplicativos e navegadores da Web, as tecnologias Applets e Java Web Start tornaram-se obsoletas, e os navegadores não dão mais suporte a plug-ins Java. A necessidade de um Java Runtime Environments de uso geral pré-instalado nos computadores tornou-se menos significativa com o passar do tempo. Com o Java 9, a API Applet tornou-se obsoleta (confira JEP 289) e com o Java 17, a API foi marcada para remoção, o que significa que certamente será removida em uma versão futura do Java.

Outra alteração significativa é a modularização do Java, também iniciada com a versão Java 9 (confira JSR 376). Como parte dessa alteração, os desenvolvedores agora podem usar uma linha de comando recém-adicionada no JDK chamada jlinkpara produzir um runtime do Java personalizado, projetado especificamente para atender às necessidades dos aplicativos, para ser implantado como um runtime incorporado junto com o código do aplicativo, muitas vezes como parte de uma imagem de contêiner para cargas de trabalho baseadas em nuvem ou como parte de instaladores para aplicativos baseados em GUI.

Atualmente, o Minecraft: Java Edition é implantado para milhões de jogadores do Minecraft com um runtime do Java personalizado incorporado ao jogo. Por trás de serviços online como LinkedIn, Yammer, Bing e Azure, a Microsoft também implanta centenas de milhares de JVMs usando essa técnica.

Criar um runtime personalizado do Java

Para criar um runtime do Java, você deve ter o JDK 9 ou posterior instalado em seu ambiente. Primeiro, baixe e instale o Microsoft Build do OpenJDK.

Identificar módulos necessários com jdeps

A Pataforma Java agora está segmentada em módulos. Confira a documentação do Java 17 para obter uma lista completa; outras versões do Java podem incluir novos módulos.

A ferramenta JDK jdeps pode ser usada para analisar um arquivo .class, um diretório ou um arquivo JAR, para identificar dependências de módulos Java, dependências internas do JDK e outras informações úteis que ajudarão os desenvolvedores a produzir runtimes do 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

A ferramenta jdeps indica que essa classe depende apenas dos tipos nos pacotes java.lang e java.io, portanto, só precisa do módulo java.base. Uma saída semelhante seria produzida para um arquivo JAR como entrada. Com uma lista dos módulos necessários, agora você pode criar um runtime do Java.

Para criar um runtime do Java a partir do JDK, você deve saber quais módulos deseja. Use jdeps para identificá-los. Para obter detalhes sobre a ferramenta de linha de comando jlink, confira a documentação.

Exemplo:

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

Agora você pode usar o runtime do Java localizado em /javaruntime para executar o código do aplicativo dependente do módulo java.base. A estrutura da pasta javaruntime produzida por jlink é semelhante à estrutura de diretórios do JDK, e a ferramenta de linha de comando java para iniciar a JVM está localizada na pasta ./bin/ como de costume. Como um runtime do Java personalizado contém todos os módulos necessários de um aplicativo existente, ele pode ser referenciado por JAVA_HOME.

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

No exemplo acima, o runtime do Java produzido no Windows consome cerca de 24 MB no Windows.

Criar um runtime do Java com a imagem de contêiner do Docker

Você pode usar os builds de vários estágios do Docker para criar, consumir e empacotar o runtime do Java personalizado como parte do build da imagem. Confira como criar runtimes do Java usando o Docker.

Base de dados de conhecimento

javax.net.ssl.SSLHandshakeException: Alerta fatal recebido: handshake_failure

Visite Segurança e Criptografia do Java para obter uma explicação sobre como corrigir esse problema.

Recursos

Fornecer comentários sobre o Build do OpenJDK da Microsoft

Envie-nos seus comentários, pensamentos e ideias para nos ajudar a melhorar o Microsoft Build do OpenJDK. Visite nossa página de discussões do OpenJDK no GitHub para nos enviar seus comentários.

Java e OpenJDK são marcas ou marcas registradas da Oracle e/ou de suas afiliadas.