Wie setze ich Java von Oracle als Standard-Java in Ubuntu?

134

Wie ändere ich den Wert von JAVA_HOMEin Ubuntu, um auf Oracle Java zu verweisen?

Sollte es auf java-6-sunoder zeigen java-6-sun-1.6.0.24?

Ashish Agarwal
quelle

Antworten:

175

Ich setze die Zeile:

export JAVA_HOME=/usr/lib/jvm/java-7-oracle

in meiner ~/.bashrcAkte.

/usr/lib/jvm/java7-oraclesollte ein symbolischer Link sein, auf den verwiesen wird /usr/lib/jvm/java-7-oracle-[version number here].

Der Grund für die symbolische Verknüpfung ist, dass Sie Ihre JVM nicht aktualisieren müssen, falls es eine neue Version der JVM gibt .bashrc Datei , sondern automatisch auf die neue Version verweisen sollte.

Wenn Sie JAVA_HOMEUmgebungsvariablen global und auf Systemebene festlegen möchten, sollte die Verwendung in der /etc/environmentDatei festgelegt werden.

srkiNZ84
quelle
4
Oder /usr/lib/jvm/java-1.6.0-openjdk-amd64, wenn Sie OpenJDK anstelle von Oracle (Sun) JDK verwenden.
pm_labs
7
Sie können export JAVA_HOME = / usr / lib / jvm / default-java /
noomz
@noomz Wie bekommst du das, wenn Standard-Java nicht existiert?
AHungerArtist
@AHungerArtist Das erhalten Sie, wenn Sie openjdk oder andere offiziell unterstützte Ubuntu-Pakete installieren. Leider wird es für das Oracle JDK mit webupd8 / java ppa nicht unterstützt. Tatsächlich ist mir völlig unklar, was das oracle-java7-set-defaultPaket bewirkt.
Melvyn
Wo in der Datei legen Sie das?
Czipperz
166

Wenn Sie es global und auf Systemebene ändern möchten;

Im

/etc/environment

füge diese Zeile hinzu:

JAVA_HOME=/usr/lib/jvm/java-7-oracle
metdos
quelle
27
+1 Dies ist der empfohlene Weg help.ubuntu.com/community/EnvironmentVariables
Daniel Kullmann
@metdos die obige Antwort ist nicht global oder auf Systemebene?
Android Killer
1
@AndroidKiller hast du den Link überprüft, auf den Daniel Kullmann hingewiesen hat?
Metdos
@metdos Funktioniert gut, aber das Referenzieren von Variablen funktioniert bei mir nicht ... $JAVA_HOMElöst sich nicht auf, wenn es so verwendet PATH=$JAVA_HOME/binwird. Neustart versucht, keine Auswirkung. Muss ich exportoder set JAVA_HOMEentweder in dieser Datei oder in meinem Profil?
Raffian
@ Raffian Ich bin mir nicht sicher über die verschiedenen Eckfälle, auf diese Weise hat es perfekt für mich funktioniert. Für weitere Informationen würde ich Ihnen empfehlen, help.ubuntu.com/community/EnvironmentVariables
metdos
53

Um das Java SE Development Kit von Oracle als Standard-Java für das System festzulegen, laden Sie einfach das neueste Java SE Development Kit von hier herunter und erstellen Sie ein Verzeichnis an einer beliebigen Stelle in Ihrem Dateisystem. /usr/javaExtrahieren Sie nun beispielsweise die Dateien, die Sie gerade in dieses Verzeichnis heruntergeladen haben:

$ sudo tar xvzf jdk-8u5-linux-i586.tar.gz -C /usr/java

So legen Sie jetzt Ihre JAVA_HOMEUmgebungsvariable fest:

$ JAVA_HOME=/usr/java/jdk1.8.0_05/
$ sudo update-alternatives --install /usr/bin/java java ${JAVA_HOME%*/}/bin/java 20000
$ sudo update-alternatives --install /usr/bin/javac javac ${JAVA_HOME%*/}/bin/javac 20000

Stellen Sie sicher, dass Java von Oracle als Standard-Java festgelegt ist durch:

$ update-alternatives --config java

Sie bekommen so etwas:

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

  Selection    Path                                           Priority   Status
------------------------------------------------------------
* 0            /opt/java/jdk1.8.0_05/bin/java                  20000     auto mode
  1            /opt/java/jdk1.8.0_05/bin/java                  20000     manual mode
  2            /usr/lib/jvm/java-6-openjdk-i386/jre/bin/java   1061      manual mode

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

Achten Sie auf das Sternchen vor den Zahlen auf der linken Seite. Wenn die richtige nicht eingestellt ist, wählen Sie die richtige aus, indem Sie die Nummer eingeben und die Eingabetaste drücken. Testen Sie jetzt Ihr Java:

$ java -version

Wenn Sie Folgendes erhalten, können Sie loslegen:

java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) Server VM (build 25.5-b02, mixed mode)

Beachten Sie auch, dass Sie möglicherweise eine Root-Berechtigung benötigen oder sich in einer Sudoers-Gruppe befinden, um dies tun zu können. Ich habe diese Lösung sowohl auf Ubuntu 12.04 als auch auf Debian Wheezy getestet und sie funktioniert in beiden.

Barrakuda
quelle
1
Ja, diese Lösung ist viel sauberer als die akzeptierte.
Simone Cittadini
@ JayminGajjar Kommentare, die Dankbarkeit ausdrücken, sind nicht notwendig. Der Mechanismus zur Unterstützung guter Fragen / Antworten auf dieser Website besteht darin, sie zu verbessern. Wenn Sie nicht genug Ruf haben, um dies zu tun, aber genug zu kommentieren haben, versuchen Sie bitte, einige nützliche Informationen darin aufzunehmen, wie z. B. welches System und welches Betriebssystem Sie getestet haben und ob diese Lösung funktioniert usw.
Barracuda
@ Barracuda Ich habe bereits abgestimmt. Sie haben Recht mit Informationen. Es hat bei Ubuntu 16.10 64-Bit-Server-Betriebssystem
funktioniert
20

Wenn Sie möchten, dass diese Umgebungsvariable allen Benutzern und beim Systemstart zur Verfügung steht , können Sie /etc/profile.d/java.sh Folgendes hinzufügen ( ggf. erstellen):

export JDK_HOME=/usr/lib/jvm/java-7-oracle
export JAVA_HOME=/usr/lib/jvm/java-7-oracle

Dann in einem Terminal laufen:

sudo chmod +x /etc/profile.d/java.sh
source /etc/profile.d/java.sh

Meine zweite Frage ist - sollte sie auf Java-6-Sonne oder Java-6-Sonne-1.6.0.24 verweisen?

Es sollte immer darauf verweisen, java-7-oracledass Symlinks zu dem zuletzt installierten (vorausgesetzt, Sie haben Java aus den Ubuntu-Repositorys und jetzt aus dem auf oracle.com verfügbaren Download installiert).

Jits
quelle
12

Java 6

export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-amd64

oder Java 7

export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64

Roman Rhrn Nesterov
quelle
10

Wenn Sie irgendeine Art von Entwicklung durchführen, müssen Sie auf das JDK (Java Development Kit) verweisen. Andernfalls können Sie auf die JRE (Java Runtime Environment) verweisen.

Das JDK enthält alles, was die JRE hat und mehr. Wenn Sie nur Java-Programme ausführen, können Sie entweder auf die JRE oder das JDK verweisen.

Sie sollten JAVA_HOME basierend auf dem aktuellen Java, das Sie verwenden, festlegen . readlinkdruckt den Wert eines symbolischen Links für das aktuelle Java und sedpasst ihn an das JRE-Verzeichnis an:

export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

Wenn Sie JAVA_HOME für JDK einrichten möchten, sollten Sie einen Ordner mehr aufrufen:

export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:jre/bin/java::")
user987339
quelle
7

Wenn Sie bei der Installation mehrerer JDKs eine bestimmte Java-Version verwenden möchten, funktioniert das Festlegen von JAVA_HOME möglicherweise nicht.

Sie müssen verwenden sudo update-alternatives --config java , um Standard-Java festzulegen.

Siehe /ubuntu/121654/how-to-set-default-java-version .

prosseek
quelle
5

Sehen Sie das ; Lauf

sudo  update-java-alternatives --list

um alle Java-Installationen auf einem Computer nach Name und Verzeichnis aufzulisten und dann auszuführen

sudo  update-java-alternatives --set [JDK/JRE name e.g. java-8-oracle]

um zu wählen, welches JRE / JDK verwendet werden soll.

Wenn Sie für jede Java-Aufgabe unterschiedliche JDKs / JREs verwenden möchten, können Sie Update-Alternativen ausführen, um jeweils eine ausführbare Java-Datei zu konfigurieren. Du kannst rennen

sudo  update-alternatives --config java[Tab]

um die Java-Befehle anzuzeigen, die konfiguriert werden können (Java, Javac, Javah, Javaws usw.). Und dann

sudo  update-alternatives --config [javac|java|javadoc|etc.]

ordnet diese Java-Aufgabe / diesen Java-Befehl einem bestimmten JDK / JRE zu.

Möglicherweise müssen Sie für einige Anwendungen auch JAVA_HOME festlegen: Aus dieser Antwort können Sie verwenden

export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")

für JREs oder

export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:jre/bin/java::")

für JDKs.

Werde sehen
quelle
Ein anderer Ansatz:java -XshowSettings 2>&1 | grep -e 'java.home' | awk '{print "JAVA_HOME="$3}' | sed "s/\/jre//g" >> /etc/environment
Xdg