Instalowanie Oracle JDK w podsystemie Windows dla systemu Linux

84

Podczas próby użycia wersji JDK Oracle dla systemu Linux w najnowszej kompilacji systemu Windows 10 obsługującej bash, napotykam problem z zawieszaniem monitu za każdym razem, gdy próbuję wywołać javaplik binarny.

Wpisanie nawet czegoś tak prostego jak java -versionzawieszenie się i muszę zakończyć proces, aby wznowić kontrolę.

Czy ktoś już to działa?

Saurabh Mishra
źródło
Naprawdę nie jestem pewien, co próbujesz zrobić. Dostępna jest wersja JDK dla systemu Windows - dlaczego używasz wersji dla systemu Linux? Czy możesz nam powiedzieć coś więcej o tym, co robisz?
stdunbar,
Chciałbym również wiedzieć, że niektórzy z nas w biurze pomyślnie przeprowadzili instalację w systemie Windows 10 i niektórzy z nas się zawieszają.
T Grey
Nie próbowałem Oracle JDK, ale zainstalowałem własny openjdk-jre-headless Ubuntu i działa dobrze. Może Oracle JDK zależy od głowy, ale bash to tylko CLI?
speedogoo
1
@Revoman sprawdź dyskusję na github.com/Microsoft/BashOnWindows/issues/49 . Wygląda na to, że problem z default-jdk został rozwiązany i możesz spróbować apt-get. O czym też wspominasz problem / proc?
Saurabh Mishra
1
@SaurabhMishra, czy możesz dostosować wybraną odpowiedź, ponieważ jest to teraz możliwe.
fieldju

Odpowiedzi:

89

Chciałem wyjaśnić, że od 9 grudnia 2016 r. Z całą pewnością można zainstalować Javę 8 na Ubuntu Bash dla Windows 10 i że @Karl Horton jest poprawny.

Będziesz musiał zainstalować unzip sudo apt-get install unzip

Skopiuj ten skrypt gdzieś w swojej sesji bash for Windows i uczyń go wykonywalnym (chmod + x nazwa pliku). Jeśli nie używasz edytora opartego na linii poleceń, takiego jak vim, będziesz miał do czynienia z zakończeniami linii Windows. możesz użyć dos2unix lub innego preferowanego sposobu radzenia sobie z tym. Po prostu wklejam go do pliku za pomocą vima.

 #!/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

A teraz mogę wykonać następujące czynności

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)                                                

Linki i wersje w powyższym skrypcie mogą być nieaktualne do czasu, gdy to przeczytasz, więc po prostu przejdź do http://www.oracle.com/technetwork/java/javase/downloads/index.html zaakceptuj licencja, aby ich js umożliwiał kopiowanie nowych adresów URL i powinieneś być gotowy.

fieldju
źródło
5
Należy dodać, że unzipjest to wymagane dla tego skryptu (ponieważ nie jest instalowany domyślnie)
River
Pojawienie się dziwnego problemu z hostem sudo: unable to resolve host DESKTOP-6PMR0AIna komputerze znajomego.
samthebest
1
Człowieku, jesteś Bogiem automatyzacji. :)
Pasha
Ten skrypt rządzi. Dzisiaj jest 16.10.2020 i teraz mam jdk8 w mojej powłoce Windows / Ubuntu.
MAXdB
66

Wygląda na to, że w sierpniu 2017 roku rozwiązanie jest prostsze, jak sugeruje @ noah-david.

Udało mi się zainstalować Oracle JDK 8 z repozytorium zespołu „WebUpd8” .

Instrukcje . Aby dodać repozytorium:

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

Żeby zainstalować:

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

Po zainstalowaniu

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
raisercostin
źródło
7
Zgoda, teraz jest to najlepsze podejście. Instalator oracle-java8 wymaga najpierw dodania ppa webupd8team:sudo add-apt-repository ppa:webupd8team/java
kaliatech
dodanie repozytorium zwraca „Nie można dodać PPA: 'ppa: ~ webupd8team / ubuntu / java'. BŁĄD: '~ webupd8team' użytkownik lub zespół nie istnieje."
Tim Holt
@TimHolt otrzymał tę samą wiadomość, gdy błędnie wpisałem nazwę zespołu.
Loic Lacomme
Może użytkownik został usunięty, ponieważ mam również błąd, że nie istnieje.
jcubic
11
Dzięki Oracle, to już NIE będzie działać, ponieważ zmienili licencje począwszy od 16 kwietnia 2019 r. - wolałbym używać Zulu lub Corretto zamiast korzystać z tego PPA - zapoznaj się z linuxuprising.com/2019/04/ ... po szczegóły dotyczące instalacji Zulu SDK
Agraj
44

Muszę czegoś przegapić ... jedyne co zrobiłem to:

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

java -version

wynik:

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)
CraftyFella
źródło
5
To jest takie, jakie powinno być! Pytanie dotyczy jednak Oracle JDK. Instalujesz Open JDK.
Teodor
2
Jeśli chcesz Oracle JDK, wpisz sudo apt-get install oracle-java8-installer
Sterling Bourne
Ponadto nie działa to w podsystemie Windows dla systemu Linux. Lub Podsystem Linux dla Windows, jakkolwiek się nazywa.
Sören,
5
Właśnie uruchomiłem sudo apt-get install default-jdksystem Windows 10 18.04 z Ubuntu 18.04 i zainstalowałem OpenJDK 11.
Steffen Roller
Obecnie default-jdk jest ustawiony na 11, ale co jeśli trzeba zainstalować jdk 8?
Shilan
9

Użyłem skryptu podanego przez @fieldju, ale przegapił kilka rzeczy, od których ten skrypt zależy, a także kopiowanie / wklejanie zawartości powoduje, że zakończenia linii Windows / znaki karetki ( /r) będą musiały zostać zastąpione zwrotami linux. Ponadto okazało się, że znacznie prostsze jest pobranie potrzebnych zamków błyskawicznych i umieszczenie ich obok skryptu. Oto pełna lista tego, co zrobiłem:

  1. W bashwpisać sudo apt-get install zip unzip, aby upewnić unzip / zip jest zainstalowany na bashkonsoli
  2. Pobierz najnowszą wersję Java JDK dla systemu Linux ze strony internetowej oracle (mam system 64-bitowy, więc wybrałem „Linux x64”) i zapisz ją w folderze gdzieś na swoim komputerze, do którego możesz się dostać. bashUWAGA: nie zmieniaj nazwę pliku, aby upewnić się, że działa ze skryptem
  3. Pobierz zasady nieograniczonej siły osobno w tym samym folderze, co ostatni plik zip, ponownie upewniając się, że nazwa pliku pozostaje taka, jaka jest.
  4. Skopiuj i wklej następujący skrypt do notatnika i zapisz go java_install_predownloaded.shw tym samym folderze obok zamków błyskawicznych:

Scenariusz:

#!/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

Ten kod jest zmodyfikowaną wersją z @fieldju, która zakłada, że ​​zipy są już pobrane i znajdują się w tym samym folderze co ten .shplik

  1. ponieważ plik zawiera zwroty karetki systemu Windows, musisz upewnić się, że zostały one zastąpione, więc bashprzejdź do miejsca, w którym zapisałeś java_install_predownloaded.shi uruchom następujące polecenie:

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

Następnie wykonałem następujące czynności, aby upewnić się, że na pewno nie ma zakończeń linii w oknach:

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

  1. Po uruchomieniu tych 2 linie, plik o nazwie java_install_predownloaded_unix_final.shbędzie w folderze, który jest nasza wersja „oczyszczone” bez zakończeń linii okien, więc po prostu trzeba wykonać ./java_install_predownloaded_unix_final.shw bashi obserwować magię. Hej, Presto, masz już zainstalowaną Javę na swojej instancji bash w systemie Windows!
AndroidNoob
źródło
Przy okazji, jeśli utworzysz skrypt używając vim lub swojego wybranego edytora opartego na linii poleceń, nie doda on końcówek linii Windows. Jeśli jednak używasz notatnika lub innego edytora opartego na systemie Windows, to tak dla wszystkich twoich rzeczy. Właśnie ponownie zainstalowałem system Windows i musiałem przejść do mojego własnego postu, aby odzyskać środowisko programistyczne. :)
fieldju
6

Kroki, które wykonałem dla nowej instalacji Oracle JDK 8 na moim Bash (Windows 10):

  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. Zaakceptuj licencje

    Wizerunek

Jesteś skończony! Sprawdź, czy wersja Java jest używana, java -versiona oczekiwany wynik powinien wyglądać mniej więcej tak:

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 W chwili, gdy to piszę, wydano stabilną wersję Oracle 9 JDK, prawdopodobnie mógłbyś poprawić krok 4 powyżej.


Źródła: https://poweruphosting.com/blog/install-java-ubuntu/

Keith OYS
źródło
5

Wydaje się, że instalacja JDK8 nie działa w tej chwili na kompilacji # 14316 WSL. Ale próba zainstalowania JDK7 działała dobrze dla mnie. Zapoznaj się z ograniczeniami tej instalacji w tej chwili i będziemy na bieżąco. Pomysł wziął się stąd: https://github.com/Microsoft/BashOnWindows/issues/196

Saurabh Mishra
źródło
1
Założę się, że ma to coś wspólnego z nowym interfejsem JavaFX UI (w domyślnym środowisku wykonawczym w Javie 8). Java 7 obsługuje również JavaFX, ale jar nie jest ładowany domyślnie.
11101101b
Jako aktualizacja statusu dla osób borykających się z tym samym problemem, wydaje się, że został on rozwiązany przez Windows Update. Nie mogę bez problemu uruchomić oracle-jdk8.
John Jones,
5

Potwierdzam tutaj, że Oracle JDK w wersji 8u102, x64 dla systemu Linux można zainstalować w porządku na Windows 10 Insider Build 14905, wydanej 16 sierpnia 2016 r.

Do pobrania stąd po zaakceptowaniu licencji

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

Postępowałem zgodnie z instrukcjami tutaj: 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

Nie miałem jeszcze okazji naprawdę podkreślić tej instalacji, ale jest to lepsze niż poprzednie zawieszenie.

Karl Horton
źródło
nie wypróbowałem instrukcji instalacji, ale po zainstalowaniu go z webupd8team / java ppa nie działa.
cheolho minale
2

To zadziałało dla mnie. Chociaż nie lubię dodawać tych dziwnych repozytoriów. Linuxuprising? Byłoby wspaniale, gdyby Microsoft to naprawił.

sudo add-apt-repository ppa:linuxuprising/java
sudo apt update
sudo apt install oracle-java10-installer
Sören
źródło
2

Wiele odpowiedzi zaleca instalację pakietu JDK systemu Linux, mimo że mają one doskonale dobry zestaw JDK systemu Windows. Piękno WSL uniemożliwia wykonywanie takich czynności, ponieważ systemy plików są interoperacyjne. Jeśli weźmiesz pod uwagę rozszerzenia plików (opisane poniżej), będziesz musiał zainstalować oba tylko w niszowych sytuacjach.

Prosta metoda

Możesz to zrobić w bardzo prosty sposób, dodając następujący wiersz kodu do swojego .bashrcpliku, zakładając, że zmienne środowiskowe Windows są ustawione poprawnie i WSL jest zainstalowany:

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

Po prostu upewnij się, że zmieniasz katalog, aby wskazywał na folder JDK. W moim przypadku jest wD:\Java\jdk11.0.4_10 w WSL/mnt/d/Java/jdk11.0.4_10

Ponadto, ponieważ używasz plików binarnych systemu Windows, musisz określić typ pliku podczas uruchamiania z powłoki WSL bash:

Przykład

Dzwonię do Windows JDK z:

CMD:

javac MyClass.java
java MyClass

WSL:

javac.exe MyClass.java
java.exe MyClass

Uwaga WSL wymaga, .exeponieważ jest to plik binarny systemu Windows. Podczas korzystania z dystrybucji Linuksa OpenJDK nie jest wymagane żadne rozszerzenie.

SentientFlesh
źródło
1

Miałem ten sam problem ale rozwiązuję go jednym poleceniem:

sudo apt upgrade

następnie uruchom te 3 polecenia:

sudo apt install default-jre
sudo apt install openjdk-11-jre-headless
sudo apt install openjdk-8-jre-headless
Youssef Khedher
źródło
0

Wygląda na to, że problem wystąpił z wersją java oracle, pobrałem wersję openJDK i teraz działa

Julien Richard
źródło
Hum W rzeczywistości prawdopodobnie pochodzi z wersji java, Java 7 działa, ale Java 8 nie.
Julien Richard
0

może działać w przypadku wersji 14905 Insider Preview, ale zawiesza się w systemie Windows 10 Pro w wersji 14393. Duża część problemu polega na tym, że firma Microsoft używa Ubuntu 14.0.4. Wersja 14.10 lub nowsza prawdopodobnie lepiej obsługiwałaby Javę 8.

Mike Selender
źródło