Não é possível definir a versão correta do java no Ubuntu 14.10

0

Recentemente, tentei instalar a versão mais recente do Oracle JDK (1.8), mas, de alguma forma, não consigo sobrescrever a versão atual do java que está sendo usada pelo sistema. Eu configurei a variável JAVA_HOME para apontar para a nova instalação, adicionei-a ao caminho e exportei as variáveis, conforme mostrado abaixo:

Conteúdo de / etc / profile:

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "$PS1" ]; then
  if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "'id -u'" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi
JAVA_HOME=/usr/local/java/jdk1.8.0_40
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME
export PATH 
~        

Saída de variáveis de ambiente:

echo $JAVA_HOME
/usr/local/java/jdk1.8.0_40

echo $PATH 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/java/jdk1.8.0_40/bin

Mas aqui está o problema:

java -version
java version "1.7.0_72"
Java(TM) SE Runtime Environment (build 1.7.0_72-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.72-b04, mixed mode)

which java
/usr/bin/java

javac -version
javac 1.7.0_72

'java -version' e javac ainda estão apontando para a instalação original. Eu instalei gradle (para o qual eu fiz a atualização em primeiro lugar), que aponta para a instalação mais recente.

gradle --version

------------------------------------------------------------
Gradle 1.5
------------------------------------------------------------

Gradle build time: Sunday, June 15, 2014 3:27:36 PM UTC
Groovy: 1.8.6
Ant: Apache Ant(TM) version 1.9.4 compiled on May 9 2014
Ivy: non official version
JVM: 1.8.0_40 (Oracle Corporation 25.40-b25)
OS: Linux 3.16.0-31-generic amd64

Referências adicionais:

update-alternatives --display java
java - auto mode
  link currently points to /usr/lib/jvm/java-7-oracle/jre/bin/java
/usr/lib/jvm/java-7-oracle/jre/bin/java - priority 2
  slave java.1.gz: /usr/lib/jvm/java-7-oracle/man/man1/java.1.gz
Current 'best' version is '/usr/lib/jvm/java-7-oracle/jre/bin/java'.

update-alternatives --display javac
javac - auto mode
  link currently points to /usr/lib/jvm/java-7-oracle/bin/javac
/usr/lib/jvm/java-7-oracle/bin/javac - priority 2
  slave javac.1.gz: /usr/lib/jvm/java-7-oracle/man/man1/javac.1.gz
Current 'best' version is '/usr/lib/jvm/java-7-oracle/bin/javac'.

Como corrijo essa bagunça? Qualquer ajuda seria muito apreciada! Além disso, se eu precisar remover a v1.7 anterior, como faço isso?

    
por Darth Coder 09.03.2015 / 18:41

2 respostas

1

Sua instalação está boa, mas você precisa do sistema de alternativas para definir o binário padrão a ser executado quando você digitar apenas jave ou javac . Basicamente, o sistema de alternativas permite que você selecione um binário para executar quando existem muitos outros binários alternativos com a mesma funcionalidade.

No seu caso, você tem duas versões de java instaladas com alternatives tendo apenas a versão antiga vinculada como genérica java binário. Você precisa adicionar a nova versão nas alternativas binárias do java e também defini-la como padrão, priorizando-a sobre outras usando um valor numérico.

sudo update-alternatives --install /usr/bin/java java /usr/local/java/jdk1.8.0_40/bin/java 100
sudo update-alternatives --install /usr/bin/javac javac /usr/local/java/jdk1.8.0_40/bin/javac 100

Esse comando fará o trabalho, nós vinculamos os novos binários às alternativas java e javac , também os definimos como padrão, dando-lhes maior prioridade (100) sobre as versões mais antigas (2 - verificado por update-alternatives --display java & amp; update-alternatives --display javac , você também pode usar update-alternatives --query java ).

    
por heemayl 09.03.2015 / 20:29
2

Você deve usar o alternatives : uma maneira que o Ubuntu oferece para suportar várias versões de um software.

Depois de instalar o Oracle JDK, informe as alternativas:

sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_40/bin/java" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_40/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_40/bin/javaws" 1

Após a instalação, selecione as alternativas padrão:

sudo update-alternatives --config java
sudo update-alternatives --config javac
sudo update-alternatives --config javaws

E então você pode selecionar em uma lista qual alternativa usar.

PPA da WebUpd8

WebUpd8 é um site popular do Ubuntu e eles mantêm muitos PPAs realmente úteis. Seu Java PPA é ótimo, porque, devido ao EULA do Oracle, o Oracle Java não pode ser redistribuído, mas o PPA executa um instalador do JDK (semelhante à abordagem flash-installer ).

Esse PPA é frequentemente atualizado e tem até mesmo o Java 9. Portanto, você sempre pode manter seu Java atualizado automaticamente e configurado adequadamente.

Para adicionar o PPA e instalar o Java8 a partir dele:

sudo add-apt-repository ppa:webupd8team/java 
sudo apt-get update
sudo apt-get install oracle-java8-installer
    
por Rael Gugelmin Cunha 09.03.2015 / 19:26