Установка Oracle JDK в подсистему Windows для Linux

84

При попытке использовать версию Oracle JDK для Linux в последней сборке Windows 10, имеющей поддержку bash, у меня возникает проблема с зависанием подсказки при попытке вызвать javaдвоичный файл.

При вводе даже такой простой java -versionвещи, как зависает, я должен прервать процесс, чтобы восстановить управление.

У кого-нибудь это еще работает?

Саураб Мишра
источник
Я действительно не уверен, что вы пытаетесь сделать. Доступна версия JDK для Windows - почему вы используете версию для Linux? Не могли бы вы рассказать нам немного больше о том, что вы делаете?
stdunbar
Я также хотел бы знать, что некоторые из нас в офисе успешно установили Windows 10, а некоторые из нас зависают.
T Grey
Я не пробовал Oracle JDK, но я установил собственный openjdk-jre-headless Ubuntu, и он отлично работает. Может быть, Oracle JDK зависит от головы, но bash - это только CLI?
speedogoo
1
@Revoman ознакомьтесь с обсуждением на github.com/Microsoft/BashOnWindows/issues/49 . Кажется, проблема с default-jdk решена, и вы можете попробовать apt-get. И о какой проблеме вы упоминаете / proc?
Саураб Мишра
1
@SaurabhMishra, можете ли вы изменить выбранный вами ответ, так как это возможно сейчас.
fieldju

Ответы:

89

Я хотел уточнить, что с 9 декабря 2016 года вы, безусловно, можете установить Java 8 на Ubuntu Bash для Windows 10 и что @Karl Horton верен.

Вам нужно будет установить unzip sudo apt-get install unzip

Скопируйте этот скрипт где-нибудь в вашем сеансе bash для Windows и сделайте его исполняемым (chmod + x filename). Если вы не используете редактор на основе командной строки, такой как vim, вам придется иметь дело с окончаниями строк Windows. вы можете использовать dos2unix или любой другой способ справиться с этим. Я просто вставляю его в файл с помощью vim.

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

И теперь я могу сделать следующее

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)                                                

Ссылки и версии в приведенном выше скрипте, вероятно, будут устаревшими к тому времени, когда вы это прочитаете, поэтому просто перейдите на http://www.oracle.com/technetwork/java/javase/downloads/index.html, примите лицензия, так что их js позволяет вам копировать новые URL-адреса, и все будет в порядке.

Fieldju
источник
5
Вы должны добавить, что unzipтребуется для этого скрипта (так как он не установлен по умолчанию)
River
Странная проблема с хостом sudo: unable to resolve host DESKTOP-6PMR0AIна компьютере друзей.
samthebest
1
Человек, ты бог автоматизации. :)
Паша
Этот сценарий потрясающий. Сегодня 16.10.2020, и теперь у меня в оболочке Windows / Ubuntu стоит jdk8.
MAXdB
66

Похоже, что в августе 2017 года решение было проще, как было предложено @ noah-david.

Мне удалось установить Oracle JDK 8 из репозитория команды «WebUpd8» .

Инструкции . Чтобы добавить репозиторий:

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

Установить:

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

После установки

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
Согласен, это лучший подход. Установщик oracle-java8 требует сначала добавления ppa webupd8team:sudo add-apt-repository ppa:webupd8team/java
kaliatech
добавление репозитория возвращает «Невозможно добавить PPA: 'ppa: ~ webupd8team / ubuntu / java'. ОШИБКА: пользователь или команда '~ webupd8team' не существует».
Тим Холт
@TimHolt получил такое же сообщение, когда я неправильно написал название команды.
Loic Lacomme
Возможно, пользователь был удален, потому что у меня тоже есть ошибка, что его не существует.
jcubic 04
11
Благодаря Oracle это больше НЕ будет работать, поскольку они изменили лицензию с 16 апреля 2019 года - я бы предпочел использовать Zulu или Corretto вместо этого PPA - см. Linuxuprising.com/2019/04/… для получения подробной информации об установке Zulu SDK
Agraj
44

Должно быть, я чего-то упускаю ... все, что я сделал, это:

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

java -version

вывод:

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
источник
5
Так и должно быть! Однако вопрос касается Oracle JDK. Вы устанавливаете Open JDK.
Teodor
2
Если вам нужен Oracle JDK, введите sudo apt-get install oracle-java8-installer
Стерлинг Борн,
Кроме того, это не работает в подсистеме Windows для Linux. Или подсистема Linux для Windows, как бы она ни называлась.
Sören
5
Я только что запустил sudo apt-get install default-jdkWindows 10 18.04 с Ubuntu 18.04, и он установил OpenJDK 11.
Штеффен Роллер,
default-jdk в настоящее время установлен на 11, но что, если нужно установить jdk 8?
Shilan
9

Я использовал сценарий, предоставленный @fieldju, но он пропустил некоторые вещи, от которых зависит сценарий, а также копирование / вставка содержимого приводит к появлению окончаний строк / возвратов каретки ( /r) Windows, которые необходимо будет заменить на возвраты Linux. Кроме того, я обнаружил, что намного проще сначала загрузить необходимые zip-архивы и поместить их вместе со сценарием. Вот полный список того, что я сделал:

  1. В bashвведите, sudo apt-get install zip unzipчтобы убедиться, что на вашей bashконсоли установлен unzip / zip
  2. Загрузите последнюю версию Java JDK для Linux с веб-сайта oracle (у меня 64-разрядная система, поэтому я выбрал «Linux x64») и сохраните ее в папке где-нибудь на вашем компьютере, к которой вы можете перейти в bashПРИМЕЧАНИЕ: не меняйте имя файла, чтобы убедиться, что он работает со скриптом
  3. Загрузите политику неограниченной стойкости отдельно в ту же папку, что и последний zip-архив, снова убедившись, что вы сохранили имя файла как есть.
  4. Скопируйте и вставьте следующий скрипт в блокнот и сохраните его как java_install_predownloaded.shв той же папке вместе с zip-файлами:

Сценарий:

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

Этот код представляет собой модифицированную версию из @fieldju, которая предполагает, что zip-архивы уже загружены и находятся в той же папке, что и этот .shфайл.

  1. Поскольку в файле есть символы возврата каретки Windows, вам необходимо убедиться, что они заменены, поэтому bashперейдите туда, где вы сохранили, java_install_predownloaded.shи выполните следующую команду:

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

Затем я также выполнил следующее, чтобы убедиться, что в окнах определенно нет окончаний строк:

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

  1. После выполнения этих 2 строки, файл с именем java_install_predownloaded_unix_final.shбудет находиться в папке , которая является нашей «очищено» версией без окончаний окна линии, так что вам просто нужно выполнить ./java_install_predownloaded_unix_final.shв bashи наблюдать волшебство произошло. Привет, Престо, теперь на вашем экземпляре bash в Windows установлена ​​Java!
AndroidNoob
источник
Кстати, если вы создаете сценарий с помощью vim или выбранного редактора на основе командной строки, он не добавляет окончания строки Windows. Однако, если вы используете блокнот или какой-либо другой редактор на базе Windows, тогда да для всех ваших вещей. Я просто переустановил окна и мне пришлось вернуться к своему посту, чтобы вернуть свой dev env. :)
fieldju
6

Шаги, которые я сделал для новой установки Oracle JDK 8 на моем 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. Принять лицензии

    Образ

Готово! Проверьте свою версию Java, используя java -versionи ожидаемый результат должен быть примерно таким:

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 На момент написания этой статьи была выпущена стабильная версия Oracle 9 JDK, вы, вероятно, могли бы настроить шаг 4 выше.


Ссылка: https://poweruphosting.com/blog/install-java-ubuntu/

Кейт ОЙС
источник
5

Похоже, установка JDK8 не работает в настоящее время на сборке № 14316 WSL. Но попытка установить JDK7 у меня сработала. Изучаю пределы этой установки в настоящее время и буду в курсе. Идея пришла отсюда: https://github.com/Microsoft/BashOnWindows/issues/196

Саураб Мишра
источник
1
Я уверен, что это как-то связано с новым материалом пользовательского интерфейса JavaFX (в среде выполнения по умолчанию в Java 8). Java 7 также поддерживает JavaFX, но по умолчанию jar не загружается.
11101101b 04
В качестве обновления статуса для людей, столкнувшихся с той же проблемой, похоже, что она была решена с помощью Центра обновления Windows. Я не могу запустить oracle-jdk8 без проблем.
Джон Джонс
5

Я подтверждаю, что Oracle JDK Version 8u102, x64 для Linux можно установить нормально на Windows 10 Insider Build 14905, выпущенную 16 августа 2016 года.

Скачать можно отсюда после принятия лицензии

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

Я выполнил инструкции здесь: 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

У меня еще не было возможности сильно напрячь эту установку, но это лучше, чем предыдущие зависания.

Карл Хортон
источник
не пробовал ваши инструкции по установке, но после установки из webupd8team / java ppa он не работает.
cheolho minale 02
2

Это сработало для меня. Хотя мне не нравится добавлять эти странные репозитории. Восстание Linux? Было бы здорово, если бы Microsoft исправила это.

sudo add-apt-repository ppa:linuxuprising/java
sudo apt update
sudo apt install oracle-java10-installer
Sören
источник
2

Многие ответы рекомендуют установить Linux JDK, даже если у них есть отличный Windows JDK. Красота WSL заключается в том, что вам не нужно делать подобные вещи, поскольку файловые системы совместимы. Пока вы принимаете во внимание расширения файлов (описанные ниже), вам нужно будет установить оба только для нишевых ситуаций.

Простой метод

Вы можете сделать это очень просто, добавив следующую строку кода в свой .bashrcфайл, предполагая, что ваши переменные среды Windows установлены правильно и WSL установлен:

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

Просто убедитесь, что вы изменили каталог, чтобы указать на вашу папку JDK. В моем случае это то, D:\Java\jdk11.0.4_10что в WSL/mnt/d/Java/jdk11.0.4_10

Кроме того, поскольку вы используете двоичные файлы Windows, вы должны указать тип файла при запуске из оболочки WSL bash:

пример

Вызов Windows JDK из:

CMD:

javac MyClass.java
java MyClass

WSL:

javac.exe MyClass.java
java.exe MyClass

Примечание. WSL требует, .exeпоскольку это двоичный файл Windows. При использовании Linux-дистрибутива OpenJDK расширение не требуется.

Чувственная плоть
источник
1

У меня была такая же проблема, но я решаю ее одной командой:

sudo apt upgrade

затем запустите эти 3 команды:

sudo apt install default-jre
sudo apt install openjdk-11-jre-headless
sudo apt install openjdk-8-jre-headless
Юсеф Хедер
источник
0

Кажется, проблема возникла с версией java oracle, я загрузил версию openJDK, и теперь она работает

Жюльен Ришар
источник
Гул На самом деле, вероятно, происходит из версии java, Java 7 работает, а Java 8 - нет.
Жюльен Ричард
0

он может работать для сборки Insider Preview 14905, но зависает в Windows 10 Pro, сборка 14393. Хорошая часть проблемы заключается в том, что Microsoft использует Ubuntu 14.0.4. 14.10 или новее, вероятно, лучше поддержат Java 8.

Майк Селендер
источник