Installieren von Oracle JDK auf einem Windows-Subsystem für Linux


83

Beim Versuch, die Linux-Version von Oracle JDK auf dem neuesten Windows 10-Build mit Unterstützung für Bash zu verwenden, tritt ein Problem auf, bei dem die Eingabeaufforderung hängen bleibt, wenn versucht wird, die javaBinärdatei aufzurufen .

Wenn java -versionich etwas so Einfaches wie " Hänge" schreibe, muss ich den Vorgang beenden, um die Kontrolle wieder aufzunehmen.

Hat das schon jemand zum Laufen gebracht?


Ich bin mir wirklich nicht sicher, was Sie versuchen zu tun. Es ist eine Windows-Version des JDK verfügbar. Warum verwenden Sie die Linux-Version? Können Sie uns etwas mehr darüber erzählen, was Sie tun?
stdunbar

Ich würde auch gerne wissen, dass einige von uns im Büro die Installation unter Windows 10 erfolgreich durchgeführt haben und einige von uns den Dreh raus haben.
T Grey

Ich habe Oracle JDK nicht ausprobiert, aber ich habe Ubuntus eigenes openjdk-jre-headless installiert und es funktioniert einwandfrei. Vielleicht hängt Oracle JDK von einem Kopf ab, aber Bash ist nur CLI?
Speedogoo

1
@Revoman Schauen Sie sich die Diskussion unter github.com/Microsoft/BashOnWindows/issues/49 an . Es scheint, dass das Problem mit dem Standard-JDK behoben wurde und Sie versuchen können, es mit apt-get zu erhalten. Und was ist das Problem, von dem Sie sprechen / proc?
Saurabh Mishra

1
@SaurabhMishra können Sie Ihre gewählte Antwort anpassen, da dies jetzt möglich ist.
Fieldju

Antworten:


87

Ich wollte klarstellen, dass Sie ab dem 9. Dezember 2016 mit Sicherheit Java 8 unter Ubuntu Bash für Windows 10 installieren können und dass @Karl Horton korrekt ist.

Sie müssen unzip installieren sudo apt-get install unzip

Kopieren Sie dieses Skript irgendwo in Ihre Bash for Windows-Sitzung und machen Sie es ausführbar (chmod + x Dateiname). Wenn Sie keinen befehlszeilenbasierten Editor wie vim verwenden, müssen Sie mit Windows-Zeilenenden umgehen. Sie können dos2unix oder Ihre bevorzugte Methode verwenden, um damit umzugehen. Ich füge es einfach mit vim in eine Datei ein.

 #!/bin/bash

set -ex

# UPDATE THESE URLs
export JDK_URL=http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz
export UNLIMITED_STRENGTH_URL=http://download.oracle.com/otn-pub/java/jce/8/jce_policy-8.zip

# Download Oracle Java 8 accepting the license
wget --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" \
${JDK_URL}
# Extract the archive
tar -xzvf jdk-*.tar.gz
# clean up the tar
rm -fr jdk-*.tar.gz
# mk the jvm dir
sudo mkdir -p /usr/lib/jvm
# move the server jre
sudo mv jdk1.8* /usr/lib/jvm/oracle_jdk8

# install unlimited strength policy
wget --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" \
${UNLIMITED_STRENGTH_URL}
unzip jce_policy-8.zip
mv UnlimitedJCEPolicyJDK8/local_policy.jar /usr/lib/jvm/oracle_jdk8/jre/lib/security/
mv UnlimitedJCEPolicyJDK8/US_export_policy.jar /usr/lib/jvm/oracle_jdk8/jre/lib/security/

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/oracle_jdk8/jre/bin/java 2000
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/oracle_jdk8/bin/javac 2000

sudo echo "export J2SDKDIR=/usr/lib/jvm/oracle_jdk8
export J2REDIR=/usr/lib/jvm/oracle_jdk8/jre
export PATH=$PATH:/usr/lib/jvm/oracle_jdk8/bin:/usr/lib/jvm/oracle_jdk8/db/bin:/usr/lib/jvm/oracle_jdk8/jre/bin
export JAVA_HOME=/usr/lib/jvm/oracle_jdk8
export DERBY_HOME=/usr/lib/jvm/oracle_jdk8/db" | sudo tee -a /etc/profile.d/oraclejdk.sh

Und jetzt kann ich Folgendes tun

fieldju@DESKTOP-LTL6MIC:~$ java -version
java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)                                                

Die Links und Versionen im obigen Skript sind wahrscheinlich zum Zeitpunkt des Lesens veraltet. Gehen Sie also einfach zu http://www.oracle.com/technetwork/java/javase/downloads/index.html und akzeptieren Sie die Lizenz, so dass ihre js Sie die neuen URLs kopieren können und Sie sollten bereit sein zu gehen.


5
Sie sollten hinzufügen, dass unzipfür dieses Skript erforderlich ist (da es nicht standardmäßig installiert ist)
River

Ein seltsames Hostproblem sudo: unable to resolve host DESKTOP-6PMR0AIauf einem Computer eines Freundes bekommen.
Samthebest


1
Mann, du bist der Gott der Automatisierung. :)
Pavel

Dieses Skript rockt. Heute ist der 16.10.2020 und jetzt habe ich jdk8 in meiner Windows / Ubuntu-Shell.
MAXdB

66

Es scheint, dass im August 2017 die Lösung einfacher ist, wie von @ noah-david vorgeschlagen.

Ich konnte Oracle JDK 8 aus dem Team-Repository „WebUpd8“ installieren .

Anleitung . So fügen Sie das Repository hinzu:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update

Installieren:

sudo apt-get install oracle-java8-installer 
sudo apt install oracle-java8-set-default

Nach der Installation

costin@amanta-win:/mnt/c/work$ java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

costin@amanta-win:/mnt/c/work$ which java
/usr/bin/java

costin@amanta-win:/mnt/c/work$ uname -a
Linux amanta-win 4.4.0-43-Microsoft #1-Microsoft Wed Dec 31 14:42:53 PST 2014 
  x86_64 x86_64 x86_64 GNU/Linux

7
Einverstanden, dass dies jetzt der beste Ansatz ist. Das oracle-java8-Installationsprogramm erfordert zuerst das Hinzufügen des webupd8team ppa:sudo add-apt-repository ppa:webupd8team/java
kaliatech

Hinzufügen von Repository-Rückgaben "PPA kann nicht hinzugefügt werden: 'ppa: ~ webupd8team / ubuntu / java'. FEHLER: '~ webupd8team' Benutzer oder Team existiert nicht."
Tim Holt

@ TimHolt hat die gleiche Nachricht erhalten, als ich den Namen des Teams falsch geschrieben habe.
Loic Lacomme

Möglicherweise wurde der Benutzer gelöscht, weil ich auch den Fehler habe, dass er nicht vorhanden ist.
Jcubic

11
Dank Oracle funktioniert dies NICHT mehr, da die Lizenzierung ab dem 16. April 2019 geändert wurde. Ich würde lieber Zulu oder Corretto anstelle dieser PPA verwenden. Weitere Informationen zur Installation von Zulu finden Sie unter linuxuprising.com/2019/04/… SDK
Agraj

41

Ich muss etwas vermissen ... alles was ich getan habe war:

sudo apt-get update
sudo apt-get install default-jdk

java -version

Ausgabe:

java version "1.7.0_131"
OpenJDK Runtime Environment (IcedTea 2.6.9) (7u131-2.6.9-0ubuntu0.14.04.2)
OpenJDK 64-Bit Server VM (build 24.131-b00, mixed mode)

5
So sollte es sein! Die Frage fragt jedoch nach Oracle JDK. Sie installieren Open JDK.
Teodor

2
Wenn Sie Oracle JDK möchten, geben Sie sudo apt-get install oracle-java8-installer
Sterling Bourne

Dies funktioniert auch nicht in Windows Subsystem für Linux. Oder Linux Subsystem für Windows, wie auch immer es heißt.
Sören

5
Ich habe gerade sudo apt-get install default-jdkWindows 10 18.04 mit Ubuntu 18.04 ausgeführt und OpenJDK 11 installiert.
Steffen Roller

default-jdk ist heutzutage auf 11 gesetzt, aber was ist, wenn man jdk 8 installieren muss?
Shilan

9

Ich habe das von @fieldju gegebene Skript verwendet, aber er hat einige Dinge übersehen, von denen das Skript abhängt, und auch das Kopieren / Einfügen des Inhalts führt dazu, dass Windows-Zeilenenden / Wagenrückläufe ( /r) durch Linux-Rückgaben ersetzt werden müssen. Außerdem fand ich es viel einfacher, zuerst die benötigten Reißverschlüsse herunterzuladen und neben das Skript zu stellen. Hier ist eine vollständige Liste meiner Aktivitäten:

  1. In bashGeben Sie sudo apt-get install zip unzipsicher unzip machen / zip auf Ihrer installierten bashKonsole
  2. Laden Sie die neueste Linux-Version des Java JDK von der Oracle-Website herunter (ich habe ein 64-Bit-System, also habe ich "Linux x64" gewählt) und speichern Sie sie in einem Ordner auf Ihrem Computer, den Sie unter bashHINWEIS: Nicht ändern können den Dateinamen, um sicherzustellen, dass er mit dem Skript funktioniert
  3. Laden Sie die Richtlinie für unbegrenzte Stärke separat in denselben Ordner wie die letzte Zip-Datei herunter , und stellen Sie erneut sicher, dass Sie den Dateinamen unverändert lassen.
  4. Kopieren Sie das folgende Skript, fügen Sie es java_install_predownloaded.shin den Editor ein und speichern Sie es im selben Ordner neben den Reißverschlüssen:

Skript:

#!/bin/bash

# Extract the archive
tar -xzvf jdk-*.tar.gz

# mk the jvm dir
sudo mkdir -p /usr/lib/jvm
# move the server jre
sudo mv jdk1.8* /usr/lib/jvm/oracle_jdk8

# install unlimited strength policy
mv UnlimitedJCEPolicyJDK8/local_policy.jar /usr/lib/jvm/oracle_jdk8/jre/lib/security/
mv UnlimitedJCEPolicyJDK8/US_export_policy.jar /usr/lib/jvm/oracle_jdk8/jre/lib/security/

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/oracle_jdk8/jre/bin/java 2000
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/oracle_jdk8/bin/javac 2000

sudo echo "export J2SDKDIR=/usr/lib/jvm/oracle_jdk8
export J2REDIR=/usr/lib/jvm/oracle_jdk8/jre
export PATH=$PATH:/usr/lib/jvm/oracle_jdk8/bin:/usr/lib/jvm/oracle_jdk8/db/bin:/usr/lib/jvm/oracle_jdk8/jre/bin
export JAVA_HOME=/usr/lib/jvm/oracle_jdk8
export DERBY_HOME=/usr/lib/jvm/oracle_jdk8/db" | sudo tee -a /etc/profile.d/oraclejdk.sh

Dieser Code ist eine modifizierte Version von @fieldju, bei der davon ausgegangen wird, dass die Zips bereits heruntergeladen wurden und sich im selben Ordner wie diese .shDatei befinden

  1. Da die Datei über die Windows-Wagenrückläufe verfügt, müssen Sie sicherstellen, dass sie ersetzt werden. bashNavigieren Sie daher zu dem Speicherort java_install_predownloaded.shund führen Sie den folgenden Befehl aus:

    sed 's/^M$//' java_install_predownloaded.sh > java_install_predownloaded_unix.sh

Ich habe dann auch Folgendes ausgeführt, um sicherzustellen, dass es definitiv keine Zeilenenden von Windows gibt:

sed 's/\r$//' java_install_predownloaded_unix.sh > java_install_predownloaded_unix_final.sh

  1. Diese 2 Zeilen Nach dem Ausführen, eine so genannte Datei java_install_predownloaded_unix_final.shwird in dem Ordner sein , die unsere ‚gereinigt‘ -Version ohne die Fenster Zeilenenden ist, so dass Sie nur ausführen müssen ./java_install_predownloaded_unix_final.shin bashund beobachten Sie die Magie geschehen. Hey Presto, du hast jetzt Java auf deiner Bash-Instanz unter Windows installiert!

Übrigens, wenn Sie das Skript mit vim oder einem Befehlszeilen-basierten Editor Ihrer Wahl erstellen, werden die Windows-Zeilenenden nicht hinzugefügt. Wenn Sie jedoch einen Editor oder einen anderen Windows-basierten Editor verwenden, dann ja zu all Ihren Dingen. Ich habe gerade Windows neu installiert und musste auf meinen eigenen Beitrag verweisen, um meine Entwickler-Umgebung zurückzubekommen. :)
Fieldju

6

Die Schritte, die ich für eine Neuinstallation von Oracle JDK 8 auf meinem Bash (Windows 10) ausgeführt habe:

  1. sudo apt-get install python-software-properties
  2. sudo add-apt-repository ppa:webupd8team/java
  3. sudo apt-get update
  4. sudo apt-get install oracle-java8-installer
  5. Lizenzen akzeptieren

    Bild

Sie sind fertig! Überprüfen Sie Ihre Java-Version mit java -versionund die erwartete Ausgabe sollte ungefähr so ​​aussehen:

java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

PS Zum Zeitpunkt des Schreibens dieser stabilen Version von Oracle 9 JDK konnten Sie wahrscheinlich Schritt 4 oben optimieren.


Referenz: https://poweruphosting.com/blog/install-java-ubuntu/


5

Scheint, dass die Installation von JDK8 auf Build # 14316 der WSL derzeit nicht funktioniert. Aber der Versuch, JDK7 zu installieren, hat für mich gut funktioniert. Erkunden Sie die Grenzen dieser Installation im Moment und bleiben Sie auf dem Laufenden. Die Idee kam von hier: https://github.com/Microsoft/BashOnWindows/issues/196


1
Ich wette, dass es etwas mit dem neuen JavaFX-UI-Zeug zu tun hat (in der Standardlaufzeit in Java 8). Java 7 unterstützt auch JavaFX, aber das JAR wird standardmäßig nicht geladen.
11101101b

Als Statusaktualisierung für Personen mit demselben Problem scheint es durch ein Windows-Update behoben worden zu sein. Ich kann oracle-jdk8 nicht ohne Probleme ausführen.
John Jones

5

Ich bestätige hier, dass Oracle JDK Version 8u102, x64 für Linux unter Windows 10 Insider Build 14905, veröffentlicht am 16. August 2016, in Ordnung installiert werden kann.

Hier kann nach Annahme der Lizenz heruntergeladen werden

C:\>systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
OS Name:                   Microsoft Windows 10 Pro Insider Preview
OS Version:                10.0.14905 N/A Build 14905

Ich habe die Anweisungen hier befolgt : wikiHow Oracle Java Install

$ java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)

$ javac -version
javac 1.8.0_102

Ich hatte noch keine Gelegenheit, diese Installation wirklich zu betonen, aber dies ist besser als die vorherigen Hänge.


Ich habe Ihre Installationsanweisungen nicht ausprobiert, aber von der Installation über das webupd8team / java ppa funktioniert es nicht.
Cheolho Minale

2

Das hat bei mir funktioniert. Ich mag es jedoch nicht, diese seltsamen Repositories hinzuzufügen. Linuxuprising? Wäre toll, wenn Microsoft das beheben würde.

sudo add-apt-repository ppa:linuxuprising/java
sudo apt update
sudo apt install oracle-java10-installer

2

In vielen Antworten wird empfohlen, das Linux-JDK zu installieren, obwohl es über ein perfektes Windows-JDK verfügt. Das Schöne an WSL ist, dass Sie solche Dinge nicht tun müssen, da die Dateisysteme interoperabel sind. Solange Sie die Dateierweiterungen berücksichtigen (siehe unten), müssten Sie beide nur für Nischensituationen installieren.

Einfache Methode

Sie können dies ganz einfach tun .bashrc, indem Sie Ihrer Datei die folgende Codezeile hinzufügen , vorausgesetzt, Ihre Windows-Umgebungsvariablen sind korrekt eingestellt und WSL ist installiert:

# Shared environment variables
export JAVA_HOME=/mnt/d/Java/jdk11.0.4_10

Stellen Sie einfach sicher, dass Sie das Verzeichnis so ändern, dass es auf Ihren JDK-Ordner verweist. In meinem Fall ist es in D:\Java\jdk11.0.4_10der WSL/mnt/d/Java/jdk11.0.4_10

Da Sie Windows-Binärdateien verwenden, müssen Sie außerdem den Dateityp angeben, wenn Sie von einer WSL-Bash-Shell ausgeführt werden:

Beispiel

Aufrufen von Windows JDK von:

CMD::

javac MyClass.java
java MyClass

WSL:

javac.exe MyClass.java
java.exe MyClass

Hinweis WSL erfordert, .exeda es sich um eine Windows-Binärdatei handelt. Bei Verwendung der Linux-Distribution des OpenJDK ist keine Erweiterung erforderlich.


1

Ich hatte das gleiche Problem, aber ich löse es mit einem Befehl:

sudo apt upgrade

Führen Sie dann diese 3 Befehle aus:

sudo apt install default-jre
sudo apt install openjdk-11-jre-headless
sudo apt install openjdk-8-jre-headless

0

Es scheint, dass das Problem mit der Java Oracle-Version aufgetreten ist. Ich habe die openJDK-Version heruntergeladen und jetzt funktioniert es


Hum Tatsächlich stammt Java 7 wahrscheinlich aus der Java-Version, Java 8 jedoch nicht.
Julien Richard

0

Es funktioniert möglicherweise für Insider Preview Build 14905, hängt jedoch von Windows 10 Pro Build 14393 ab. Ein guter Teil des Problems besteht darin, dass Microsoft Ubuntu 14.0.4 verwendet. 14.10 oder höher würde Java 8 wahrscheinlich besser unterstützen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.