Встановлення Oracle JDK в підсистемі Windows для Linux


83

При спробі використовувати версію Linux JDK Oracle в останній збірці 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 . Здається, проблему з типовим jdk вирішено, і ви можете спробувати apt-get. Також про яку проблему ви згадуєте / proc?
Saurabh Mishra

1
@SaurabhMishra чи можете ви скорегувати обрану вами відповідь, оскільки це можливо зараз.
fieldju

Відповіді:


89

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

Вам потрібно буде встановити розпакування sudo apt-get install unzip

Скопіюйте цей скрипт десь у вашому bash для сеансу Windows і зробіть його виконуваним (chmod + x ім'я файлу). Якщо ви не використовуєте редактор на основі командного рядка, такий як 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-адреси, і ви повинні бути готові до роботи.


5
Ви повинні додати, що unzipпотрібно для цього сценарію (оскільки він не встановлений за замовчуванням)
Рівер

Отримання дивної проблеми sudo: unable to resolve host DESKTOP-6PMR0AIз хостом на комп’ютері друзів.
сам найкращий


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 La recommend

Можливо, користувача видалили, оскільки я також маю помилку, що його не існує.
jcubic

11
Завдяки Oracle, це НЕ працюватиме більше, оскільки вони змінили ліцензування починаючи з 16 квітня 2019 року - я б скоріше використовував Zulu або Corretto, а не використовував цей PPA - зверніться до linuxuprising.com/2019/04/…, щоб дізнатися більше про встановлення Zulu SDK
Agraj,

43

Напевно, мені чогось не вистачає ... Все, що я зробив, це:

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)

5
Ось так повинно бути! Однак питання задає Oracle JDK. Ви встановлюєте Open JDK.
Теодор

2
Якщо ви хочете Oracle JDK, введіть sudo apt-get install oracle-java8-installer
Sterling Bourne

Крім того, це не працює в підсистемі Windows для Linux. Або підсистема Linux для Windows, як би вона не називалася.
Sören

5
Я щойно працював sudo apt-get install default-jdkна Windows 10 18.04 з Ubuntu 18.04, і він встановив OpenJDK 11.
Steffen Roller

default-jdk сьогодні встановлено на 11, але що, якщо потрібно встановити jdk 8?
Шилан

9

Я використав сценарій, наданий @fieldju, але він пропустив деякі речі, від яких залежить сценарій, а також копіювання / вставка вмісту призводить до того, що закінчення рядків windows / carriage return ( /r), які потрібно буде замінити на повернення Linux. Крім того, мені здалося набагато простішим завантажити спочатку потрібні zip-файли та покласти їх поряд із сценарієм. Ось повний перелік того, що я зробив:

  1. В bash, типу , sudo apt-get install zip unzipщоб переконатися , розпакувати / зіп встановлений на вашій bashконсолі
  2. Завантажте останню версію Java Java JDK з веб-сайту oracle (у мене 64-розрядна система, тому я вибрав "Linux x64") і збережіть її в папці десь на вашому комп'ютері, до якої ви можете перейти в bashПРИМІТКА: не змінюйте ім'я файлу, щоб переконатися, що воно працює зі сценарієм
  3. Завантажте політику необмеженої міцності окремо в ту ж папку, що і останній zip-файл, знову гарантуючи збереження імені файлу як є.
  4. Скопіюйте та вставте наступний сценарій у блокнот і збережіть його, як java_install_predownloaded.shу тій же папці, поряд із застібками-блискавками:

Сценарій:

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

Потім я також запустив наступне, щоб переконатися, що в Windows точно немає закінчень рядків:

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і спостерігати чарівництво сталося. Гей, Престо, тепер у вас встановлено java на вашому екземплярі bash у Windows!

До речі, якщо ви створюєте сценарій за допомогою vim або вибраного вами редактора на основі командного рядка, він не додає закінчень рядків Windows. Однак якщо ви використовуєте блокнот або інший редактор на основі Windows, тоді так для всіх ваших речей. Я щойно перевстановив вікна, і мені довелося перейти до власного допису, щоб повернути розробницьку програму. :)
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

Оскільки оновлення статусу для людей, які стикаються з тією ж проблемою, воно, здається, вирішено за допомогою служби Windows Update. Я не можу запустити oracle-jdk8 без проблем.
Джон Джонс

5

Тут я підтверджую, що Oracle JDK версії 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 це не працює.
cheolho minale 02

2

Це спрацювало для мене. Хоча, мені не подобається додавати ці дивні сховища. Повстання Linux? Було б чудово, якби Microsoft це виправила.

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

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:

Приклад

Виклик 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 ні.
Julien Richard

0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.