Cài đặt Oracle JDK trên hệ thống con Windows dành cho Linux


83

Khi cố gắng sử dụng phiên bản Linux của Oracle's JDK trên bản dựng Windows 10 mới nhất có hỗ trợ bash, tôi đang gặp phải sự cố với lời nhắc bị treo bất cứ khi nào cố gắng gọi javatệp nhị phân.

Gõ ngay cả một cái gì đó đơn giản như java -versionbị treo và tôi phải kết thúc quá trình để tiếp tục kiểm soát.

Có ai làm việc này được chưa?


Tôi thực sự không chắc bạn đang cố gắng làm gì. Đã có phiên bản JDK dành cho Windows - tại sao bạn lại sử dụng phiên bản Linux? Bạn có thể cho chúng tôi biết thêm một chút về những gì bạn đang làm không?
stdunbar

Tôi cũng muốn biết rằng một số người trong chúng tôi trong văn phòng đã thực hiện cài đặt thành công Windows 10 và một số người trong chúng tôi gặp sự cố.
T Grey

Tôi đã không thử Oracle JDK nhưng tôi đã cài đặt openjdk-jre-headless của riêng Ubuntu và nó hoạt động tốt. Có lẽ Oracle JDK phụ thuộc vào một cái đầu nhưng bash chỉ là CLI?
speedogoo

1
@Revoman kiểm tra cuộc thảo luận tại github.com/Microsoft/BashOnWindows/issues/49 . Có vẻ như sự cố với default-jdk đã được giải quyết và bạn có thể thử apt-get nó. Ngoài ra vấn đề mà bạn đang đề cập về / proc là gì?
Saurabh Mishra

1
@SaurabhMishra, bạn có thể điều chỉnh câu trả lời đã chọn của mình vì điều này có thể xảy ra ngay bây giờ.
fieldju

Câu trả lời:


88

Tôi muốn làm rõ rằng kể từ ngày 9 tháng 12 năm 2016, bạn chắc chắn có thể cài đặt Java 8 trên Ubuntu Bash cho Windows 10 và @Karl Horton là chính xác.

Bạn sẽ cần phải cài đặt giải nén sudo apt-get install unzip

Sao chép tập lệnh này vào đâu đó trong bash của bạn cho phiên windows và làm cho nó có thể thực thi được (chmod + x tên tệp). Nếu bạn không sử dụng trình soạn thảo dựa trên dòng lệnh, chẳng hạn như vim thì bạn sẽ có phần cuối dòng cửa sổ để xử lý. bạn có thể sử dụng dos2unix hoặc cách ưa thích của bạn để giải quyết vấn đề đó. Tôi chỉ cần dán nó vào một tệp bằng 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

Và bây giờ tôi có thể làm những việc sau

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)                                                

Các liên kết và phiên bản trong tập lệnh trên có thể đã lỗi thời vào thời điểm bạn đọc phần này, vì vậy chỉ cần truy cập vào http://www.oracle.com/technetwork/java/javase/downloads/index.html chấp nhận giấy phép để js của họ cho phép bạn sao chép các URL mới và bạn nên thực hiện.


5
Bạn nên thêm điều đó unziplà bắt buộc cho tập lệnh này (vì nó không được cài đặt theo mặc định)
River

Gặp sự cố máy chủ kỳ lạ sudo: unable to resolve host DESKTOP-6PMR0AItrên máy tính của bạn bè.
samthebest


1
Người đàn ông, bạn là Chúa của tự động hóa. :)
Pavel

Kịch bản này đá. Hôm nay là 16/10/2020 và bây giờ tôi có jdk8 trong Windows / Ubuntu shell của mình.
MAXdB

66

Có vẻ như vào năm 2017, giải pháp đơn giản hơn theo đề xuất của @ noah-david.

Tôi đã có thể cài đặt Oracle JDK 8 từ kho lưu trữ nhóm “WebUpd8” .

Hướng dẫn . Để thêm kho lưu trữ:

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

Để cài đặt:

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

Sau khi cài đặt

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
Đồng ý rằng đây là cách tiếp cận tốt nhất. Nhà tiên tri-java8-installer đòi hỏi đầu tiên thêm ppa webupd8team:sudo add-apt-repository ppa:webupd8team/java
kaliatech

thêm trả về kho lưu trữ "Không thể thêm PPA: 'ppa: ~ webupd8team / ubuntu / java'. LỖI: người dùng hoặc nhóm '~ webupd8team' không tồn tại."
Tim Holt

@TimHolt nhận được thông báo tương tự khi tôi viết sai chính tả tên của đội.
Loic Lacomme

Có thể người dùng đã bị xóa vì tôi cũng gặp lỗi rằng nó không tồn tại.
jcubic

11
Cảm ơn Oracle, điều này sẽ KHÔNG hoạt động nữa vì họ đã thay đổi cấp phép bắt đầu từ ngày 16 tháng 4 năm 2019 - Tôi muốn sử dụng Zulu hoặc Corretto thay vì sử dụng PPA này - tham khảo linuxuphesia.com/2019/04/… để biết chi tiết về cài đặt Zulu SDK
Agraj

42

Tôi phải thiếu một cái gì đó ... tất cả những gì tôi đã làm là:

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

java -version

đầu ra:

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
Đây là cách nó nên được! Tuy nhiên, câu hỏi đặt ra cho Oracle JDK. Bạn đang cài đặt Open JDK.
Teodor

2
Nếu bạn muốn Oracle JDK, gõ sudo apt-get install oracle-java8-installer
Sterling Bourne

Ngoài ra, tính năng này không hoạt động trong Hệ thống con của Windows dành cho Linux. Hoặc Linux Subsystem cho Windows, tuy nhiên nó được gọi là.
Sören

5
Tôi vừa chạy sudo apt-get install default-jdktrên Windows 10 18.04 với Ubuntu 18.04 và nó đã cài đặt OpenJDK 11.
Steffen Roller

default-jdk ngày nay được đặt thành 11, nhưng nếu một người cần cài đặt jdk 8 thì sao?
Shilan

9

Tôi đã sử dụng tập lệnh được cung cấp bởi @fieldju nhưng anh ấy đã bỏ lỡ một số thứ mà tập lệnh phụ thuộc vào và việc sao chép / dán nội dung cũng dẫn đến việc có kết thúc dòng cửa sổ / trả về xuống dòng ( /r) sẽ cần thay thế thành trả về linux. Ngoài ra, tôi thấy dễ dàng hơn rất nhiều khi tải xuống các tệp nén cần thiết trước và đặt chúng cùng với tập lệnh. Đây là danh sách đầy đủ những gì tôi đã làm:

  1. Trong bash, nhập sudo apt-get install zip unzipđể đảm bảo rằng giải nén / zip được cài đặt trên bashbảng điều khiển của bạn
  2. Tải xuống phiên bản Linux mới nhất của Java JDK từ trang web của oracle (Tôi có hệ thống 64 bit nên tôi đã chọn "Linux x64") và lưu nó trong một thư mục ở đâu đó trên máy tính của bạn mà bạn có thể truy cập trong bashLƯU Ý: không thay đổi tên tệp để đảm bảo nó hoạt động với tập lệnh
  3. Tải xuống chính sách độ bền không giới hạn riêng biệt trong cùng thư mục với tệp zip cuối cùng, một lần nữa đảm bảo bạn giữ nguyên tên tệp.
  4. Sao chép và dán tập lệnh sau vào notepad và lưu nó như java_install_predownloaded.shtrong cùng một thư mục cùng với tệp nén:

Kịch bản:

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

Mã này là phiên bản sửa đổi từ @fieldju, giả sử rằng các tệp nén đã được tải xuống và nằm trong cùng thư mục với .shtệp này

  1. bởi vì tệp có ký tự xuống dòng windows, bạn cần đảm bảo chúng được thay thế, vì vậy khi bashđiều hướng đến nơi bạn đã lưu java_install_predownloaded.shvà chạy lệnh sau:

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

Sau đó, tôi cũng chạy phần sau để đảm bảo chắc chắn không có kết thúc dòng nào từ cửa sổ:

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

  1. Sau khi chạy những 2 dây chuyền, một tập tin gọi là java_install_predownloaded_unix_final.shsẽ nằm trong thư mục đó là phiên bản 'sạch' của chúng tôi mà không có sự kết thúc cửa sổ dòng, vì vậy bạn chỉ cần thực hiện ./java_install_predownloaded_unix_final.shtrong bashvà xem điều kỳ diệu xảy ra. Này Trước khi bạn đã cài đặt java trên phiên bản bash của bạn trên windows!

BTW, nếu bạn tạo tập lệnh bằng vim hoặc trình soạn thảo dựa trên dòng lệnh của bạn mà bạn chọn, nó sẽ không thêm phần cuối dòng cửa sổ. Tuy nhiên, nếu bạn sử dụng notepad hoặc một số trình chỉnh sửa dựa trên windows khác thì có cho tất cả nội dung của bạn. Tôi vừa cài đặt lại các cửa sổ và phải tham khảo bài đăng của chính mình để lấy lại env nhà phát triển của tôi. :)
fieldju

6

Các bước tôi đã thực hiện để cài đặt mới Oracle JDK 8 trên Bash (Windows 10) của mình:

  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. Chấp nhận giấy phép

    Hình ảnh

Bạn đã hoàn tất! Kiểm tra phiên bản java của bạn đang sử dụng java -versionvà đầu ra dự kiến ​​phải như thế này:

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 Tại thời điểm viết bài này, phiên bản ổn định Oracle 9 JDK đã được phát hành, bạn có thể chỉnh sửa bước 4 ở trên.


Tham khảo: https://poweruphosting.com/blog/install-java-ubuntu/


5

Có vẻ như cài đặt JDK8 hiện không hoạt động trên Bản dựng # 14316 của WSL. Nhưng cố gắng cài đặt JDK7 đã hoạt động tốt đối với tôi. Khám phá các giới hạn của cài đặt này vào lúc này và sẽ tiếp tục được đăng. Ý tưởng đến từ đây: https://github.com/Microsoft/BashOnWindows/issues/196


1
Cá cược của tôi là nó có liên quan đến nội dung giao diện người dùng JavaFX mới (trong thời gian chạy mặc định trong Java 8). Java 7 cũng hỗ trợ JavaFX, nhưng jar không được tải theo mặc định.
11101101b

Là một bản cập nhật trạng thái cho điều này cho những người gặp phải vấn đề tương tự, nó dường như đã được giải quyết bằng Windows Update. Tôi không thể chạy oracle-jdk8 mà không gặp sự cố.
John Jones

5

Tôi xác nhận ở đây rằng Oracle JDK Phiên bản 8u102, x64 cho linux có thể cài đặt được trên Windows 10 Insider Build 14905, được phát hành vào ngày 16 tháng 8 năm 2016.

Có thể tải xuống từ đây sau khi chấp nhận giấy phép

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

Tôi đã làm theo hướng dẫn tại đây: 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

Tôi vẫn chưa có cơ hội để thực sự nhấn mạnh cài đặt này, nhưng điều này tốt hơn so với lần treo trước đó.


chưa thử hướng dẫn cài đặt của bạn nhưng từ cài đặt nó từ webupd8team / java ppa, nó không hoạt động.
cheolho minale

2

Điều này đã làm việc cho tôi. Mặc dù vậy, tôi không thích thêm những kho lưu trữ kỳ lạ này. Phát sinh Linux? Sẽ thật tuyệt nếu Microsoft sửa lỗi đó.

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

2

Rất nhiều câu trả lời khuyên bạn nên cài đặt Linux JDK mặc dù họ có một Windows JDK hoàn toàn tốt. Vẻ đẹp của WSL ngăn bạn phải làm những việc như thế này, vì các hệ thống tệp có thể tương tác với nhau. Miễn là bạn tính đến các phần mở rộng tệp (được nêu bên dưới), bạn sẽ chỉ phải cài đặt cả hai cho các trường hợp thích hợp.

Phương pháp đơn giản

Bạn có thể thực hiện việc này rất đơn giản bằng cách thêm dòng mã sau vào .bashrctệp của mình , giả sử rằng các biến Môi trường Windows của bạn được đặt chính xác và WSL được cài đặt:

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

Chỉ cần đảm bảo rằng bạn thay đổi thư mục để trỏ đến thư mục JDK của bạn. Trong trường hợp của tôi, nó D:\Java\jdk11.0.4_10trong WSL là/mnt/d/Java/jdk11.0.4_10

Ngoài ra, vì bạn đang sử dụng tệp nhị phân Windows, bạn phải chỉ định loại tệp khi chạy từ trình bao cơ sở WSL:

Thí dụ

Gọi Windows JDK từ:

CMD:

javac MyClass.java
java MyClass

WSL:

javac.exe MyClass.java
java.exe MyClass

Lưu ý WSL yêu cầu .exevì nó là một tệp nhị phân Windows. Khi sử dụng bản phân phối Linux của OpenJDK, không cần phần mở rộng ..


1

Tôi đã gặp vấn đề tương tự nhưng tôi giải quyết nó bằng một lệnh:

sudo apt upgrade

sau đó chạy 3 lệnh sau:

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

0

Có vẻ như sự cố đã xảy ra với phiên bản java oracle, tôi đã tải xuống phiên bản openJDK và bây giờ nó hoạt động


Hum Trong thực tế có lẽ đến từ phiên bản của java, Java 7 hoạt động nhưng Java 8 thì không.
Julien Richard

0

nó có thể hoạt động cho Insider Preview build 14905, nhưng bị treo trên Windows 10 Pro build 14393. Một phần tốt của vấn đề là Microsoft đang sử dụng Ubuntu 14.0.4. 14.10 trở lên có lẽ sẽ hỗ trợ tốt hơn cho Java 8.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.