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

Sau*_*hra 75 java linux windows windows-subsystem-for-linux

当试图在支持bash的最新Windows 10版本上使用Linux版本的Oracle JDK时,我在尝试调用java二进制文件时遇到提示挂起的问题.

键入甚至像java -version挂起一样简单的东西,我必须终止进程以恢复控制.

有人这个工作了吗?

fie*_*dju 71

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

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

将此脚本复制到bash for windows session中的某个位置并使其可执行(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
Run Code Online (Sandbox Code Playgroud)

现在我可以做到以下几点

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)                                                
Run Code Online (Sandbox Code Playgroud)

在您阅读本文时,上述脚本中的链接和版本可能已过时,因此请访问http://www.oracle.com/technetwork/java/javase/downloads/index.html接受许可证,以便他们的js允许您复制新的URL,你应该很高兴.

  • 您应该添加此脚本需要`unzip`(因为默认情况下不安装) (4认同)
  • 这个剧本很震撼。今天是 2020 年 10 月 16 日,现在我的 Windows/Ubuntu shell 中有 jdk8。 (2认同)

rai*_*tin 63

似乎在2017年8月,@ noah-david建议的解决方案更简单.

我能够从"WebUpd8"团队存储库安装Oracle JDK 8 .

说明.要添加存储库:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

安装:

sudo apt-get install oracle-java8-installer 
sudo apt install oracle-java8-set-default
Run Code Online (Sandbox Code Playgroud)

安装后

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
Run Code Online (Sandbox Code Playgroud)

  • 多亏了Oracle,自2019年4月16日起更改许可以来,这将不再起作用-我宁愿使用Zulu或Corretto而不是使用此PPA-请参阅https://www.linuxuprising.com/2019/ 04 / install-latest-openjdk-12-11-or-8-in.html了解有关安装Zulu SDK的详细信息 (8认同)
  • 同意这是现在最好的方法.oracle-java8-installer需要先添加webupd8team ppa:`sudo add-apt-repository ppa:webupd8team/java` (7认同)

Cra*_*lla 31

我必须遗漏一些东西......我所做的只是:

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

java -version
Run Code Online (Sandbox Code Playgroud)

输出:

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)
Run Code Online (Sandbox Code Playgroud)

  • 这应该是怎么回事!不过,这个问题要求_Oracle_ JDK.你正在安装_Open_ JDK. (3认同)
  • 我只是在Windows 10 18.04和Ubuntu 18.04上运行了sudo apt-get install default-jdk,它安装了OpenJDK 11。 (3认同)
  • 如果需要Oracle JDK,请键入sudo apt-get install oracle-java8-installer (2认同)

And*_*oob 8

我使用了@fieldju给出的脚本,但是他错过了脚本所依赖的一些东西,并且复制/粘贴内容导致了windows行结尾/回车符(/r),这将需要替换为linux返回.此外,我发现首先下载所需的拉链并将它们放在脚本旁边会更直接.这是我所做的完整列表:

  1. bash,键入sudo apt-get install zip unzip以确保在bash控制台上安装了解压缩/ zip
  2. oracle网站下载最新的Linux JDK版本(我有一个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
Run Code Online (Sandbox Code Playgroud)

此代码是@fieldju的修改版本,它假定已经下载了拉链并且与此.sh文件位于同一文件夹中

  1. 因为文件有窗口回车,你需要确保它们被替换,所以在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!


Sau*_*hra 5

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


Kar*_*ton 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
Run Code Online (Sandbox Code Playgroud)

我按照此处的说明进行操作: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
Run Code Online (Sandbox Code Playgroud)

我还没有机会真正强调此安装,但这比以前的挂起要好。


Kei*_*OYS 5

我在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)
Run Code Online (Sandbox Code Playgroud)

PS在撰写本文时,已经发布了稳定版本的Oracle 9 JDK,您可能可以调整上面的第4步。


参考:https : //poweruphosting.com/blog/install-java-ubuntu/


Sen*_*esh 5

很多答案都建议安装 Linux JDK,尽管他们有一个非常好的 Windows JDK。WSL 的优点在于让您不必执行此类操作,因为文件系统是可互操作的。只要考虑到文件扩展名(如下所述),您只需在特殊情况下安装两者即可。

直接方法

您可以非常简单地通过将以下代码行添加到您的.bashrc文件中来完成此操作(假设您的 Windows 环境变量已正确设置并且 WSL 已安装):

# Shared environment variables
export JAVA_HOME=/mnt/d/Java/jdk11.0.4_10
Run Code Online (Sandbox Code Playgroud)

只需确保将目录更改为指向 JDK 文件夹即可。就我而言,D:\Java\jdk11.0.4_10WSL 中是/mnt/d/Java/jdk11.0.4_10

此外,由于您使用的是 Windows 二进制文件,因此在从 WSL bash shell 运行时必须指定文件类型:

例子

从以下位置调用Windows JDK:

CMD:

javac MyClass.java
java MyClass
Run Code Online (Sandbox Code Playgroud)

WSL:

javac.exe MyClass.java
java.exe MyClass
Run Code Online (Sandbox Code Playgroud)

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