OpenJDK-20.0.2

Introdução ao OpenJDK

"OpenJDK" é uma implementação de código aberto da plataforma "Java Standard Edition" da "Oracle". "OpenJDK" é útil para desenvolver aplicativos "Java" e fornece um ambiente de tempo de execução completo para executar aplicativos "Java".

Esse pacote é conhecido por construir e funcionar corretamente usando uma plataforma LFS 12.0.

"OpenJDK" é código "GPL", com uma exceção especial feita para projetos não-livres para usar essas classes nos produtos proprietários deles. De forma semelhante à "LGPL", que permite que aplicativos não-livres se vinculem a bibliotecas fornecidas por logiciário livre, a Licença Pública Geral GNU, versão 2, com a exceção Classpath permite que aplicativos de terceiros usem classes fornecidas por logiciário livre sem a exigência de que o logiciário de terceiros também seja livre. Tal como acontece com a "LGPL", quaisquer modificações feitas nas partes de logiciário livre de um aplicativo de terceiros também precisam ser disponibilizadas livremente.

[Nota]

Nota

O fonte do "OpenJDK" inclui uma suíte de teste de código aberto muito completa usando o equipamento de teste "JTreg". As instruções de teste abaixo permitem testar o "JDK" recém-construído para compatibilidade razoável com o "JDK" proprietário da "Oracle". No entanto, para a finalidade de que uma implementação independente alegue compatibilidade, ela precisa passar por uma suíte proprietária de teste "JCK/TCK". Nenhuma alegação de compatibilidade, ou mesmo compatibilidade parcial, pode ser feita sem passar por uma suíte de teste aprovada.

A "Oracle" fornece acesso gratuito à comunidade, caso a caso, a um kit de ferramentas fechado para garantir 100% de compatibilidade com o "JDK" proprietário dela. Nem a versão binária fornecida na página Java-20.0.2 nem a "JVM" construída com as instruções abaixo foram testadas contra o TCK. Qualquer versão que seja construída usando as instruções fornecidas não pode alegar ser compatível com o "JDK" proprietário, sem que o(a) próprio(a) usuário(a) solicite e complete os testes de compatibilidade.

Com isso em mente, os binários produzidos usando este método de construção são testados regularmente em relação ao "TCK" pelos membros listados no sítio acima. Além da licença comunitária acima, uma licença educacional e não comercial para o "TCK" pode ser obtida aqui.

Informação do Pacote

  • Transferência (HTTP): https://github.com/openjdk/jdk20u/archive/jdk-20.0.2-ga.tar.gz

  • Soma de verificação MD5 da transferência: 0a6c990bd0a4eee6eee06e89b74cde19

  • Tamanho da Transferência: 105 MB

  • Espaço em disco estimado exigido: 3,6 GB (adicionar 800 MB para testes)

  • Tempo de construção estimado: 4,8 UPC com quatro (04) tarefas (adicionar 36 UPC para testes com quatro (04) tarefas)

Transferências Adicionais

Equipamento opcional de teste

Dependências do OpenJDK

Dependências Exigidas

Um binário existente (Java-20.0.2 ou uma versão construída anterior desse pacote. As instruções abaixo assumem que você está usando Configurando o ambiente JAVA), alsa-lib-1.2.9, cpio-2.14, Cups-2.4.6, UnZip-6.0, Which-2.21, Bibliotecas do Xorg e Zip-3.0

Recomendadas

Opcionais

git-2.41.0, Graphviz-8.1.0, Mercurial-6.5.1, ccache, pandoc e pigz

Instalação do OpenJDK

Se você baixou o equipamento opcional de teste, desempacote-o agora:

tar -xf ../jtreg-7.2+1.tar.gz
[Nota]

Nota

Antes de continuar, você deveria garantir que sua variável de ambiente "PATH" contenha o local do compilador "Java" usado para inicializar o "OpenJDK". Essa é a única exigência para o ambiente. Instalações modernas "Java" não precisam de "JAVA_HOME"; e "CLASSPATH" não é usado aqui. Além disso, os(as) desenvolvedores(as) do "OpenJDK" recomendam desconfigurar "JAVA_HOME".

O sistema de construção não permite a chave "-j" em "MAKEFLAGS". Veja-se a explicação do comando para "--with-jobs=" para mais informações relativas a personalizar a paralelização.

Configure e construa o pacote com os seguintes comandos:

unset JAVA_HOME                             &&
bash configure --enable-unlimited-crypto    \
               --disable-warnings-as-errors \
               --with-stdc++lib=dynamic     \
               --with-giflib=system         \
               --with-harfbuzz=system       \
               --with-jtreg=$PWD/jtreg      \
               --with-lcms=system           \
               --with-libjpeg=system        \
               --with-libpng=system         \
               --with-zlib=system           \
               --with-version-build="9"     \
               --with-version-pre=""        \
               --with-version-opt=""        \
               --with-cacerts-file=/etc/pki/tls/java/cacerts &&
make images

Para testar os resultados, você precisará executar o aplicativo "jtreg". Você consegue configurar o número de testes simultâneos adicionando o valor "-conc:<X>" no comando abaixo (caso contrário, os testes executarão sequencialmente):

export JT_JAVA=$(echo $PWD/build/*/jdk) &&
jtreg/bin/jtreg -jdk:$JT_JAVA -automatic -ignore:quiet -v1 \
   test/jdk:tier1 test/langtools:tier1 &&
unset JT_JAVA

Para mais controle sobre a suíte de teste, revise a documentação disponível em "jtreg/doc/jtreg/usage.txt". Para revisar os resultados, vejam-se os arquivos "JTreport/test_{jdk,langtools}/text/stats.txt" e "JTreport/test_{jdk,langtools}/text/summary.txt". Você deveria esperar ver cerca de sessenta (60) falhas e dez (10) erros.

Instale o pacote com os seguintes comandos como o(a) usuário(a) "root":

install -vdm755 /opt/jdk-20.0.2+9             &&
cp -Rv build/*/images/jdk/* /opt/jdk-20.0.2+9 &&
chown -R root:root /opt/jdk-20.0.2+9          &&
for s in 16 24 32 48; do
  install -vDm644 src/java.desktop/unix/classes/sun/awt/X11/java-icon${s}.png \
                 /usr/share/icons/hicolor/${s}x${s}/apps/java.png
done
[Nota]

Nota

Se desejar instalar somente o "Java Runtime Environment", [então] você pode substituir "build/*/images/jre" no comando "cp" acima.

Agora existem dois "SDKs" "OpenJDK" instalados em "/opt". Você deveria decidir qual deles gostaria de usar como padrão. Normalmente, você optaria pelo recém-instalado "OpenJDK". Nesse caso, faça o seguinte como o(a) usuário(a) "root":

ln -v -nsf jdk-20.0.2+9 /opt/jdk

Se desejado, você pode criar arquivos ".desktop" para adicionar entradas no menu para "java" e "jconsole". Os ícones necessários já foram instalados. Como o(a) usuário(a) "root":

mkdir -pv /usr/share/applications &&

cat > /usr/share/applications/openjdk-java.desktop << "EOF" &&
[Desktop Entry]
Name=OpenJDK Java 20.0.2 Tempo de Execução
Comment=OpenJDK Java 20.0.2 Tempo de Execução
Exec=/opt/jdk/bin/java -jar
Terminal=false
Type=Application
Icon=java
MimeType=application/x-java-archive;application/java-archive;application/x-jar;
NoDisplay=true
EOF
cat > /usr/share/applications/openjdk-jconsole.desktop << "EOF"
[Desktop Entry]
Name=OpenJDK Java 20.0.2 Console
Comment=OpenJDK Java 20.0.2 Console
Keywords=java;console;monitoramento
Exec=/opt/jdk/bin/jconsole
Terminal=false
Type=Application
Icon=java
Categories=Application;System;
EOF

Explicações do Comando

bash configure...: o "configure" do nível superior é um envólucro em torno daquele do "autotools". Ele não é executável e precisa ser executado por intermédio do "bash".

--enable-unlimited-crypto: Devido às limitações no uso de criptografia em alguns países, existe a possibilidade de limitar o tamanho das chaves de encriptação e o uso de alguns algoritmos em um arquivo de política. Essa chave permite enviar um arquivo de política sem restrições. É responsabilidade do(a) usuário(a) garantir a adequada aderência à legislação.

--disable-warnings-as-errors: Essa chave desabilita o uso de "-Werror" na construção.

--with-stdc++lib=dynamic: Essa chave força o sistema de construção a vincular-se a "libstdc++.so" (dinâmica) em vez de "libstdc++.a" (estática).

--with-jobs=<X>: O "-j" passado para "make" não funciona com "make" como invocado aqui. Por padrão, o sistema de construção usará o número de "CPUs" – 1.

--with-jtreg=$PWD/jtreg: Essa chave informa ao "configure" onde encontrar o "jtreg". Omita se você não baixou a suíte opcional de teste.

--with-{giflib,harfbuzz,lcms,libjpeg,libpng,zlib}=system: Essas chaves forçam o sistema de construção a usar as bibliotecas do sistema em vez das versões incluídas.

--with-version-build: Atualmente, o sistema de construção não inclui o número da construção na sequência de caracteres da versão. Ele tem que ser especificado aqui.

--with-version-pre: Essa chave te permite prefixar a sequência de caracteres da versão com uma sequência personalizada de caracteres.

--with-version-opt: Essa chave te permite adicionar uma descrição opcional da construção à sequência de caracteres de versão.

--with-cacerts-file=/etc/pki/tls/java/cacerts: Especifica onde encontrar um arquivo "cacerts", "/etc/pki/tls/java/" em um sistema BLFS. Caso contrário, um vazio será criado. Você consegue usar o comando "/usr/sbin/make-ca --force" para gerá-lo, depois que tenha instalado os binários "Java".

--with-boot-jdk: Essa chave fornece o local do "JDK" temporário. Ele normalmente não é necessário se "java" for encontrado no "PATH".

Configurando o OpenJDK

Informação de Configuração

Normalmente, o ambiente "JAVA" é configurado depois de instalar a versão binária e também pode ser usado com o pacote recém-construído. Revise Configurando o ambiente JAVA caso você queira modificar alguma coisa.

Para testar se as páginas de manual estão instaladas corretamente, emita "source /etc/profile" e "man java" para exibir a respectiva página de manual.

Configurando o arquivo de Certificados de Autoridade Certificadora do JRE (cacerts)

Se você executou as instruções na página "make-ca-1.12", [então] você só precisa criar um link simbólico no local padrão para o arquivo "cacerts". Como usuário(a) "root":

ln -sfv /etc/pki/tls/java/cacerts /opt/jdk/lib/security/cacerts

Para verificar a instalação, emita:

cd /opt/jdk
bin/keytool -list -cacerts

No "prompt" "Enter keystore password:", digite "changeit" (o padrão) ou simplesmente pressione a tecla Enter. Se o arquivo "cacerts" foi instalado corretamente, [então] você verá uma lista dos certificados com informações relacionadas a cada um. Caso contrário, você precisa reinstalá-los.

Conteúdo

Aplicativos Instalados: jar, jarsigner, java, javac, javadoc, javap, jcmd, jconsole, jdb, jdeprscan, jdeps, jfr, jhsdb, jimage, jinfo, jlink, jmap, jmod, jpackage, jps, jrunscript, jshell, jstack, jstat, jstatd, jwebserver, keytool, rmiregistry e serialver
Bibliotecas Instaladas: /opt/jdk-20.0.2/lib/*
Diretório Instalado: /opt/jdk-20.0.2

Descrições Curtas

jar

combina múltiplos arquivos em um arquivamento "jar"

jarsigner

assina arquivos "jar" e verifica as assinaturas e a integridade de um arquivo "jar" assinado

java

inicia um aplicativo "Java" iniciando um ambiente em tempo de execução "Java", carregando uma classe especificada e invocando o método principal dela

javac

lê definições de classe e interface, escritas na linguagem de programação "Java", e as compila em arquivos de classe de código de bytes

javadoc

analisa as declarações e comentários da documentação em um conjunto de arquivos fonte "Java" e produz um conjunto correspondente de páginas "HTML" descrevendo as classes, interfaces, construtores, métodos e campos

javap

desmonta um arquivo de classe "Java"

jcmd

é um utilitário para enviar solicitações de comando de diagnóstico para uma "Java Virtual Machine" em execução

jconsole

é uma ferramenta gráfica de console para monitorar e gerenciar aplicativos "Java" e máquinas virtuais locais e remotas

jdb

é um depurador simples de linha de comando para classes "Java"

jdeprscan

escaneia arquivos de classe ou "jar" em busca de usos de elementos obsoletos de "API"

jdeps

mostra as dependências de nível de pacote ou de nível de classe de arquivos de classe "Java"

jfr

é uma ferramenta para trabalhar com arquivos Flight Recorder

jhsdb

é uma ferramenta para analisar o conteúdo de um despejo central originário de uma "Java Virtual Machine" ("JVM") quebrada

jimage

é usado para listar, extrair, verificar ou obter informações relativas a módulos no formato "jimage"

jinfo

imprime informações de configuração "Java" para um determinado processo "Java", arquivo central ou servidor remoto de depuração

jlink

é usado para montar e otimizar um conjunto de módulos e as dependências deles em uma imagem personalizada em tempo de execução

jmap

imprime mapas de memória de objetos compartilhados ou detalhes de memória "heap" de um determinado processo, arquivo central ou um servidor remoto de depuração

jmod

cria arquivos "JMOD" e lista o conteúdo dos arquivos existentes "JMOD"

jpackage

gera pacotes e imagens de aplicativos "Java"

jps

lista as "JVMs" instrumentadas no sistema alvo

jrunscript

é um "shell" de "script" de linha de comando

jshell

é uma ferramenta interativa para aprender a linguagem de programação "Java" e "prototipar" código "Java"

jstack

imprime rastreamentos de pilha "Java" de camadas "Java" para um determinado processo "Java", arquivo central ou um servidor remoto de depuração

jstat

exibe estatísticas de desempenho para uma "JVM" instrumentada

jstatd

é um aplicativo de servidor "RMI" que monitora a criação e o encerramento de "JVMs" instrumentadas

jwebserver

fornece um servidor mínimo "HTTP", projetado para ser usado para prototipagem, testagem e depuração

keytool

é um utilitário de gerenciamento de chaves e certificados

rmiregistry

cria e inicia um registro de objeto remoto na porta especificada no dispositivo atual

serialver

retorna o "serialVersionUID" para uma ou mais classes em um formato adequado para cópia em uma classe em evolução