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 .