在Linux的Windows子系统上安装Oracle JDK


83

当尝试在支持bash的最新Windows 10版本上使用Oracle JDK的Linux版本时,每当尝试调用java二进制文件时,提示挂起都会出现问题。

键入甚至java -version挂起之类的简单内容,我也必须终止该过程以恢复控制。

有人在工作吗?


我真的不确定您要做什么。有Windows版本的JDK-为什么要使用Linux版本?您能否告诉我们更多有关您在做什么的信息?
stdunbar '16

我还想知道,我们办公室中的某些人已成功在Windows 10上完成了安装,而我们中的某些人却死了。
T Gray

我没有尝试Oracle JDK,但是我安装了Ubuntu自己的openjdk-jre-headless,并且运行良好。也许Oracle JDK靠一个头而bash只是CLI?
speedogoo '16

1
@Revoman看看在讨论github.com/Microsoft/BashOnWindows/issues/49。似乎default-jdk的问题已解决,您可以尝试apt-get它。另外,您提到的关于/ proc的问题是什么?
Saurabh Mishra

1
@SaurabhMishra您可以调整选择的答案,因为现在可以这样做。
fieldju

Answers:


88

我想澄清一下,截至2016年12月9日,您肯定可以在Windows 10的Ubuntu Bash上安装Java 8,并且@Karl Horton是正确的。

您将需要安装解压缩 sudo apt-get install unzip

将此脚本复制到Windows会话的bash中的某个位置,并使其可执行(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此脚本必需的(因为默认情况下未安装该脚本)
River

sudo: unable to resolve host DESKTOP-6PMR0AI在朋友计算机上获取奇怪的主机问题。
samthebest


1
伙计,您是自动化之神。:)
Pavel

该脚本令人震惊。今天是2020年10月16日,现在在Windows / Ubuntu shell中有jdk8。
MAXdB

66

似乎在2017年8月,该解决方案更简单了,如@ noah-david所建议。

我能够从“ WebUpd8”团队资源库安装Oracle JDK 8 。

说明。要添加存储库:

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-installer需要首先添加webupd8team ppa:sudo add-apt-repository ppa:webupd8team/java
kaliatech

添加存储库返回“无法添加PPA:'ppa:〜webupd8team / ubuntu / java'。错误:'〜webupd8team'用户或团队不存在。”
蒂姆·霍尔特

当我拼错球队名称时,@ TimHolt收到了相同的消息。
Loic Lacomme,

也许用户被删除了,因为我也有一个错误,提示它不存在。
jcubic '19

11
由于甲骨文,这将不是因为他们改变开始2019 4月16日,发牌工作下去-我宁愿使用的不是使用此PPA祖鲁或Corretto -参见linuxuprising.com/2019/04/...的详细信息,安装祖鲁SDK
Agraj,

42

我一定想念一些东西...我所做的只是:

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。
Teodor

2
如果要使用Oracle JDK,请键入sudo apt-get install oracle-java8-installer
Sterling Bourne

另外,这在Windows Subsystem for Linux中不起作用。或Windows的Linux子系统,但是被称为。
索伦

5
我只是跑sudo apt-get install default-jdk在Windows 10 18.04与Ubuntu 18.04和安装它的OpenJDK 11
斯特芬辊

现在的default-jdk设置为11,但是如果需要安装jdk 8怎么办?
石栏

9

我使用了@fieldju提供的脚本,但是他错过了脚本依赖的某些内容,并且复制/粘贴内容还会导致Windows行尾/回车符(/r)需要替换为Linux回车符。另外,我发现下载第一个所需的zip并将其放在脚本旁边更加简单。这是我所做工作的完整列表:

  1. 在中bash,键入sudo apt-get install zip unzip以确保bash控制台上已安装unzip / zip
  2. oracle网站下载Java JDK的最新Linux版本(我有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

然后,我还运行以下命令以确保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.shbash并观看魔术发生。嘿,Presto您现在在Windows的bash实例上安装了Java!

顺便说一句,如果您使用vim或您选择的基于命令行的编辑器创建脚本,则不会添加Windows行尾。但是,如果您使用记事本或其他基于Windows的编辑器,则对您的所有内容都可以。我只是重新安装了Windows,不得不重新整理自己的帖子才能恢复我的开发环境。:)
fieldju's

6

我在Bash(Windows 10)上全新安装Oracle JDK 8的步骤如下:

  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

似乎目前在WSL的Build#14316上无法安装JDK8。但是尝试安装JDK7对我来说很好。目前正在探索此安装的限制,并将继续发布。想法来自这里:https : //github.com/Microsoft/BashOnWindows/issues/196


1
我敢打赌,它与新的JavaFX UI东西有关(在Java 8的默认运行时中)。Java 7也支持JavaFX,但是默认情况下不加载jar。
11101101b

作为针对面临相同问题的人员的状态更新,它似乎已由Windows Update解决。我无法毫无问题地运行oracle-jdk8。
约翰·琼斯

5

我在这里确认的是,适用于Linux的Oracle JDK版本8u102 x64可在2016年8月16日发布的Windows 10 Insider Build 14905上安装。

接受许可后可从此处下载

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

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 Environment变量并安装了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 shell运行时必须指定文件类型:

从以下位置调用Windows JDK:

CMD

javac MyClass.java
java MyClass

WSL:

javac.exe MyClass.java
java.exe MyClass

注意WSL.exe是必需的,因为它是Windows二进制文件。使用OpenJDK的Linux发行版时,不需要扩展。


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

它可能适用于Insider Preview内部版本14905,但挂在Windows 10 Pro内部版本14393上。问题的很大一部分是Microsoft使用的是Ubuntu 14.0.4。14.10或更高版本可能会更好地支持Java 8。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.