Alternar entre várias versões java

65

Ao instalar o Android Studio no Ubuntu 14.04, recebo a mensagem de que minha versão do Java ( javac 1.7.0_79) está causando problemas. Encontrei uma solução de como instalar uma versão Oracle mais recente do Java:

sudo apt-add-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

No entanto, receio que isso possa sobrescrever minha open-jdkversão existente do Java. Como não sei quais dos meus programas dependem do Java, receio que isso possa travar esses outros programas.

Existe uma maneira de garantir apt-getque não sobrescreva meu Java anterior? Basicamente, eu gostaria de ter instalado os dois e poder alternar entre eles manualmente, dependendo da versão que eu preciso.

mcExchange
fonte

Respostas:

83

O Apt-get não substituirá as versões java existentes.

Para alternar entre as versões java instaladas, use o update-java-alternativescomando

Listar todas as versões java:

update-java-alternatives --list

Defina a versão java como padrão (precisa de permissões de root):

sudo update-java-alternatives --set /path/to/java/version

... onde /path/to/java/versionestá um dos listados pelo comando anterior (por exemplo /usr/lib/jvm/java-7-openjdk-amd64).


Informação adicional:

update-java-alternativesé uma ferramenta de conveniência que usa do Debian sistema de alternativas ( update-alternatives) para definir um monte de links para a versão java especificada (por exemplo java, javac...).

danzel
fonte
11
Para mim, isso causou java -version ser java8, mas JAVA_HOME ainda foi definido para 7 :(
Nenotlep
tq isso resolve meu problema também. @Nenotlep o que eu fiz é editar a variável de ambiente manualmente quer no bashrc ou / etc / environment
nuttynibbles
update-java-alternativesnão estava disponível para mim. Acabei de substituir esse comando por update-alternatives java.
Nofinator 7/11
@nofinator que afeta apenas o javaexecutável. Qual versão do Ubuntu você usa?
Daniel13 /
11
@Nenotlep para mudar, JAVA_HOMEvocê deve executar o seguinte comando: source /etc/environment
janb 16/11/18
48

Usar

sudo update-alternatives --config java

que lista todas as versões instaladas com a atual ativa marcada e fornece uma caixa de diálogo para alternar:

There are 3 choices for the alternative java (providing /usr/bin/java).

Selection    Path...
------------------------------------------------------------
  0            /usr/lib/jvm/java-9-oracle/bin/java...
* 1            /usr/lib/jvm/java-7-oracle/jre/bin/java...
  2            /usr/lib/jvm/java-8-oracle/jre/bin/java...
  3            /usr/lib/jvm/java-9-oracle/bin/java...

Press <enter> to keep...[*], or type selection number: 

Usar

export JAVA_HOME="$(jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')"

definir a $JAVA_HOMEpartir da versão ativa atual

muet
fonte
Conforme observado por @danzel na resposta aceita, isso afeta apenas o javaexecutável, não as outras partes da configuração. Use update-java-alternativesse disponível.
Premek Brada 10/01
5

Com base na resposta do @muet, achei que isso funcionava perfeitamente:

Adicione isto a ~/.bashrc:

export JAVA_HOME="$(jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));')"

Adicionar aos aliases:

alias useJava8='yes | sudo apt-get install oracle-java8-set-default && source ~/.bashrc'
alias useJava7='yes | sudo apt-get install oracle-java7-set-default && source ~/.bashrc'

Em seguida, você pode alternar dentro do mesmo shell usando apenas: useJava7ouuseJava8

brianjohnsen
fonte
para fazer aliases permanente pode colocá-los em ~ / .bashrc, mais informações aqui askubuntu.com/questions/17536/...
Konstantin Zyubin
E: Não foi possível localizar o pacote oracle-java7-set-default
Prakash Pandey
A maneira mais fácil de instalar, usar e alternar entre diferentes versões java é usando o SDKMAN! Veja aqui: sdkman.io/usage.html
brianjohnsen
Recentemente, deparei com outro comando para definir o JAVA_HOME, ainda para experimentar .bashrc:export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
ThiamTeck 8/18/18
3

Configurando Java

Você pode configurar qual versão é o padrão para uso na linha de comandos usando update-alternatives, que gerencia quais links simbólicos são usados ​​para diferentes comandos.

sudo update-alternatives --config java

A saída será semelhante à seguinte.

There are 5 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      auto mode
  1            /usr/lib/jvm/java-6-oracle/jre/bin/java          1         manual mode
  2            /usr/lib/jvm/java-7-oracle/jre/bin/java          2         manual mode
  3            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode
  4            /usr/lib/jvm/java-8-oracle/jre/bin/java          3         manual mode
  5            /usr/lib/jvm/java-9-oracle/bin/java              4         manual mode

Press <enter> to keep the current choice[*], or type selection number:

Agora você pode escolher o número a ser usado como padrão. Isso também pode ser feito para outros comandos Java, como o compilador ( javac), o gerador de documentação ( javadoc), a ferramenta de assinatura JAR ( jarsigner) e muito mais. Você pode usar o seguinte comando, preenchendo o comando que deseja personalizar.

sudo update-alternatives --config command

Definindo a JAVA_HOMEvariável de ambiente

Muitos programas, como servidores Java, usam a variável de ambiente JAVA_HOME para determinar o local da instalação do Java.

Copie o caminho da sua instalação preferida e abra / etc / environment usando Sublime Text ou seu editor de texto favorito.

sudo subl /etc/environment

No final deste arquivo, adicione a seguinte linha, substituindo o caminho destacado pelo seu próprio caminho copiado.

JAVA_HOME="/usr/lib/jvm/java-8-oracle"

Salve e saia do arquivo e carregá-lo: source /etc/environment.
Agora você pode testar se a variável de ambiente foi definida, executando o seguinte comando: echo $JAVA_HOME. Isso retornará o caminho que você acabou de definir.

naXa
fonte