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

时间:2016-04-07 14:09:22

标签: java linux windows windows-subsystem-for-linux

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

即使像java -version那样简单的打字也会挂起,我必须终止该过程才能恢复控制。

任何人都有这个工作吗?

12 个答案:

答案 0 :(得分:60)

我想澄清一下,截至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

现在我可以做以下

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允许您复制新的网址应该很高兴。

答案 1 :(得分:59)

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

我能够从“WebUpd8” team repository安装Oracle JDK 8。

Instructions。要添加存储库:

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

答案 2 :(得分:16)

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

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)

答案 3 :(得分:7)

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

  1. bash中,键入sudo apt-get install zip unzip以确保bash控制台上安装了解压缩/ zip
  2. oracle website下载最新的Linux JDK版本(我有一个64位系统,因此我选择了“Linux x64”)并将其保存在计算机上某个可以进入的文件夹中bash注意:请勿更改文件名以确保其适用于脚本
  3. unlimited strength policy单独下载到与最后一个zip相同的文件夹中,再次确保您保持文件名不变。
  4. 将以下脚本复制并粘贴到记事本中,并将其作为java_install_predownloaded.sh保存在拉链旁边的同一文件夹中:
  5. 脚本:

    #!/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的修改版本,它假定已经下载了拉链并且与此.sh文件位于同一文件夹中

    1. 因为文件有窗口回车,你需要确保它们被替换,所以在bash导航到你保存的地方java_install_predownloaded.sh并运行以下命令:

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

    2. 然后我还运行以下内容以确保Windows中没有明确的行结尾:

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

      1. 运行这两行之后,名为java_install_predownloaded_unix_final.sh的文件将位于我们的“已清理”版本的文件夹中,没有Windows行结尾,因此您只需要在{{1}中执行./java_install_predownloaded_unix_final.sh看着魔法发生了。嘿Presto你现在已经在windows上的bash实例上安装了java!

答案 4 :(得分:5)

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

答案 5 :(得分:4)

我在此确认,Oracle JDK版本8u102,x64 for linux可在2016年8月16日发布的Windows 10 Insider Build 14905上安装。

Downloadable from here after accepting license

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

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

答案 6 :(得分:4)

我在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. 接受许可

    Image

  6. 你完成了!使用java -version检查您的Java版本,预期输出应该是这样的:

    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)
    

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

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

答案 7 :(得分:2)

许多答案都建议您安装Linux JDK,即使它们具有非常好的Windows JDK也是如此。由于文件系统是可互操作的,因此WSL的优点在于使您不必执行此类操作。只要考虑到文件扩展名(下面概述),您就只需要为特定情况安装这两个文件即可。

直接方法

只要将Windows环境变量设置正确并安装了WSL,您就可以非常简单地通过将以下代码行添加到.bashrc文件中来完成此操作:

# 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发行版时,不需要扩展。.

答案 8 :(得分:1)

这对我有用。虽然,我不想添加这些奇怪的存储库。 Linuxuprising? 如果微软能解决这个问题会很棒。

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

答案 9 :(得分:0)

似乎java oracle版本出现问题,我已下载openJDK版本,现在可以正常工作

答案 10 :(得分:0)

它可能适用于Insider Preview build 14905,但挂起在Windows 10 Pro build 14393.问题的一个很好的部分是微软正在使用Ubuntu 14.0.4。 14.10或更高版本可能更好地支持Java 8。

答案 11 :(得分:0)

我遇到了同样的问题,但是我用一个命令解决了这个问题:

sudo apt upgrade

然后运行3个命令:

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