Começando com seu último parágrafo
Você pode me dizer onde o IcedTea6 provavelmente está instalado no Ubuntu? Eu gostaria de sobrescrevê-lo se puder e garantir que minha JVM e Compiler estejam usando a mesma versão.
O Ubuntu fornece uma ótima ferramenta para selecionar um JDK / JRE a partir de múltiplas instalações. Isso é update-java-alternatives
. Está intimamente ligado à ferramenta update-alternatives
.
Cada JDK / JRE inclui um conjunto de ferramentas Java como javac
, java
, javaws
, jinfo
, javah
etc. Uma instalação pode vir com um arquivo .jinfo
oculto em que esses componentes java estão listadas. No meu sistema, quando eu instalo o pacote openjdk-8-jdk
, um arquivo /usr/lib/jvm/.java-1.8.0-openjdk-amd64.jinfo
é criado. O conteúdo desse arquivo é (pulou algumas linhas)
name=java-8-openjdk-amd64
alias=java-1.8.0-openjdk-amd64
priority=1081
section=main
hl rmid /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/rmid
hl java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
hl keytool /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/keytool
hl jjs /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/jjs
hl pack200 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/pack200
hl rmiregistry /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/rmiregistry
.
.
. (skipped lines)
.
.
jdkhl jdb /usr/lib/jvm/java-8-openjdk-amd64/bin/jdb
jdkhl serialver /usr/lib/jvm/java-8-openjdk-amd64/bin/serialver
jdkhl wsgen /usr/lib/jvm/java-8-openjdk-amd64/bin/wsgen
jdkhl jcmd /usr/lib/jvm/java-8-openjdk-amd64/bin/jcmd
jdk appletviewer /usr/lib/jvm/java-8-openjdk-amd64/bin/appletviewer
jdk jconsole /usr/lib/jvm/java-8-openjdk-amd64/bin/jconsole
plugin mozilla-javaplugin.so /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/IcedTeaPlugin.so
update-java-alternatives
usa esse arquivo para criar links alternativos no diretório /etc/alternatives
. O propósito deste diretório é fornecer um mecanismo pelo qual você pode selecionar um programa padrão a partir de um conjunto de ferramentas similares. Isso é ótimo para várias versões do JDK (veja mais em update-alternatives
)
Breve discussão de update-alternatives
Para demonstrar o processo brevemente. Quando um programa é instalado pela primeira vez, ele registra suas alternativas para um nome mestre (como javac
) no banco de dados de alternativas (isso está contido no diretório /var/lib/dpkg/alternatives
). Durante o processo de instalação, update-alternatives
cria um link mestre em /usr/bin/javac
apontando para /etc/alternatives/javac
, que também é um link simbólico apontando para o arquivo real do JDK.
Agora, quando você instalar outro JDK, ele também terá um programa javac
. Portanto, ao instalar o segundo JDK update-alternatives
atualiza automaticamente o link simbólico /etc/alternatives/javac
para apontar para aquele com a prioridade mais alta. Ele também atualiza o banco de dados de alternativas, para que você possa selecionar manualmente um padrão chamando-o.
Voltar para o update-java-alternatives
update-java-alternatives
usa update-alternatives
para fornecer um conjunto completo de padrões de uma única instalação do JDK / JRE. A idéia é que você selecione uma instalação do JDK / JRE e todas as ferramentas desse JRE / JDK serão usadas como padrão para fornecer várias ferramentas Java, evitando que você use update-alternatives
para cada ferramenta. Então, quando você usa update-java-alternatives
para selecionar um JDK, digamos openjdk-8-jdk
por exemplo, ele faz as ferramentas Java deste JDK (como javac
, java
, javaws
etc) como padrão. Contanto que o JDK esteja instalado corretamente e liste suas ferramentas em .jinfo
file .
TL; DR
Portanto, para responder à sua consulta em resumo, o IcedTea6 Plugin é configurado no arquivo .jinfo
e update-java-alternatives
usa esse arquivo para atualizar os links para apontá-lo. Portanto, você precisa criar um arquivo para o JDK listando o plug-in e todas as ferramentas java e use update-java-alternatives
.
Se você instalou o JDK / JRE manualmente, verifique esta pergunta para obter ajuda, tornando-a reconhecida pela ferramenta update-java-alternatives
.
Mas ainda temos problemas ...
Parece que este update-java-alternatives
não está mais atualizando os componentes do JDK ultimamente. Está apenas atualizando as ferramentas do JRE. Há muitas queixas dizendo que o uso dessa ferramenta não atualiza todos os componentes do Java. Depois de experimentar o mesmo problema e gastar quase 5 horas, acho que encontrei uma solução. A solução está apenas alterando o arquivo hl
para jre
e jdkhl
para jdk
in .jinfo
. Encontrei um antigo arquivo .jinfo
no github , onde eles eram jre
e jdk
.
A correção para o arquivo .jinfo
.
Então, para corrigir isso, você precisa alterar hl
e jdkhl
s. Se o seu arquivo é .openjdk-8-jdk.jinfo
in /usr/lib/jvm/
use este comando
sudo sed -i 's/^hl/jre/p' /usr/lib/jvm/.openjdk-8-jdk.jinfo
sudo sed -i 's/^jdkhl/jdk/p' /usr/lib/jvm/.openjdk-8-jdk.jinfo
Agora, para atualizar, primeiro liste as alternativas
sudo update-java-alternatives -l
Ele retornará algo assim (a resposta real pode ser diferente para você)
java-1.8.0-openjdk-amd64 1081 /usr/lib/jvm/java-1.8.0-openjdk-amd64
jdk1.8.0_65 1081 /usr/lib/jvm/jdk1.8.0_65
Copie o nome alternativo da primeira coluna e use-o para definir o padrão. Para definir jdk1.8.0_65
como padrão, eu usaria
sudo update-java-alternatives -s jdk1.8.0_65 -v
Agora, verifique a versão java
e javac
.