Basculer entre plusieurs versions de Java

65

Lors de l'installation d'Android Studio sur Ubuntu 14.04, je reçois le message que ma version de Java ( javac 1.7.0_79) pose des problèmes. J'ai trouvé une solution pour installer une nouvelle version de Java Oracle:

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

Cependant, je crains que cela ne remplace ma open-jdkversion existante de Java. Comme je ne sais pas lequel de mes programmes dépend de Java, je crains que cela ne plante ces autres programmes.

Existe-t-il un moyen de apt-getne pas écraser mon Java précédent? Je voudrais fondamentalement avoir installé les deux et pouvoir basculer entre eux manuellement, en fonction de la version dont j'ai besoin.

mcExchange
la source

Réponses:

83

Apt-get ne remplacera pas les versions java existantes.

Pour basculer entre les versions Java installées, utilisez la update-java-alternativescommande.

Répertoriez toutes les versions de Java:

update-java-alternatives --list

Définir la version Java comme valeur par défaut (nécessite des autorisations root):

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

... où /path/to/java/versionest l'un de ceux répertoriés par la commande précédente (par exemple /usr/lib/jvm/java-7-openjdk-amd64).


Information additionnelle:

update-java-alternativesest un outil pratique qui utilise Debian système d'alternatives ( update-alternatives) pour définir un tas de liens vers la version java spécifiée (par exemple java, javac...).

Danzel
la source
1
Pour moi, java -version était java8, mais JAVA_HOME était toujours réglé sur 7 :(
Nenotlep
Cela résout aussi mon problème. @Nenotlep, ce que j'ai fait est de modifier manuellement la variable d'environnement, que ce soit en .bashrc ou / etc / environment
nuttynibbles
update-java-alternativesn'était pas disponible pour moi. Je viens de remplacer cette commande par update-alternatives java.
nofinator
@nofinator qui n'affecte que l' javaexécutable. Quelle version d'Ubuntu utilisez-vous?
vendredi
1
@Nenotlep pour pouvoir JAVA_HOMEvous changer, vous devez exécuter la commande suivante: source /etc/environment
janb
48

Utilisation

sudo update-alternatives --config java

qui répertorie toutes les versions installées avec la version actuelle active marquée et fournit une boîte de dialogue pour basculer:

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: 

Utilisation

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

définir à $JAVA_HOMEpartir de la version active actuelle

muet
la source
Comme l'a noté @danzel dans la réponse acceptée, cela ne concerne que l' javaexécutable, pas les autres parties de la configuration. Utilisez update-java-alternativessi disponible.
Premek Brada
5

Basé sur la réponse de @muet, j'ai trouvé que cela fonctionnait parfaitement:

Ajouter ceci à ~/.bashrc:

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

Ajouter aux alias:

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'

Ensuite, vous pouvez basculer dans le même shell en utilisant seulement: useJava7ouuseJava8

Brianjohnsen
la source
pour rendre les pseudonymes permanents, on peut les mettre dans ~ / .bashrc, plus d'infos ici askubuntu.com/questions/17536/…
Konstantin Zyubin
E: impossible de localiser le paquet oracle-java7-set-default
Prakash Pandey
SDKMAN est le moyen le plus simple sans aucun doute d’installer, d’utiliser et de basculer entre les différentes versions de Java. Voir ici: sdkman.io/usage.html
brianjohnsen
récemment rencontré une autre commande pour définir JAVA_HOME, mais pas encore pour essayer .bashrc:export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
ThiamTeck
3

Configuration de Java

Vous pouvez configurer la version par défaut à utiliser dans la ligne de commande en utilisant update-alternatives, qui gère les liens symboliques utilisés pour différentes commandes.

sudo update-alternatives --config java

La sortie ressemblera à ce qui suit.

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:

Vous pouvez maintenant choisir le numéro à utiliser par défaut. Cela peut également être fait pour d'autres commandes Java, telles que compiler ( javac), le générateur de documentation ( javadoc), l'outil de signature JAR ( jarsigner), etc. Vous pouvez utiliser la commande suivante en remplissant la commande que vous souhaitez personnaliser.

sudo update-alternatives --config command

Définition de la JAVA_HOMEvariable d'environnement

De nombreux programmes, tels que les serveurs Java, utilisent la variable d'environnement JAVA_HOME pour déterminer l'emplacement d'installation de Java.

Copiez le chemin de votre installation préférée, puis ouvrez / etc / environment en utilisant Sublime Text ou votre éditeur de texte préféré.

sudo subl /etc/environment

A la fin de ce fichier, ajoutez la ligne suivante en vous assurant de remplacer le chemin en surbrillance par votre propre chemin copié.

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

Sauvegardez et quittez le fichier et le recharger: source /etc/environment.
Vous pouvez maintenant vérifier si la variable d'environnement a été mis en exécutant la commande suivante: echo $JAVA_HOME. Cela retournera le chemin que vous venez de définir.

naXa
la source