OpenJDK-21.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.1.
"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
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-21.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/jdk21u/archive/jdk-21.0.2-ga.tar.gz
-
Soma de verificação MD5 da transferência:
6b714196cac31ebf31a0fc1a910ccb87
-
Tamanho da Transferência: 107 MB
-
Espaço em disco estimado exigido: 3,7 GB (adicionar 557 MB
para testes)
-
Tempo de construção estimado: 5,2 UPC com quatro (04) tarefas
(adicionar 32 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-21.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.11, cpio-2.15, Cups-2.4.7, UnZip-6.0, Which-2.21, Bibliotecas do
Xorg e Zip-3.0
Recomendadas
make-ca-1.13, giflib-5.2.1, HarfBuzz-8.3.0,
Little
CMS-2.14, libjpeg-turbo-3.0.1, libpng-1.6.42 e
Wget-1.21.4
Opcionais
git-2.44.0,
Graphviz-10.0.1, Mercurial-6.6.3,
ccache, pandoc e pigz
Instalação do OpenJDK
Se você baixou o equipamento opcional de teste, desempacote-o
agora:
tar -xf ../jtreg-7.3.1+1.tar.gz
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="13" \
--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-21.0.2+13 &&
cp -Rv build/*/images/jdk/* /opt/jdk-21.0.2+13 &&
chown -R root:root /opt/jdk-21.0.2+13 &&
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
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-21.0.2+13 /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 21.0.2 Tempo de Execução
Comment=OpenJDK Java 21.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 21.0.2 Console
Comment=OpenJDK Java 21.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-se
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.13",
[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:
37 bibliotecas em
/opt/jdk-21.0.2+13/lib/
Diretório Instalado:
/opt/jdk-21.0.2+13
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
|