当我试图在支持Bash的最新Windows 10版本上使用Oracle的JDK Linux版时,当尝试调用java
二进制文件时,我的提示符会出现挂起问题。
即使是输入如java -version
这样简单的命令,也会出现卡顿的情况,我必须终止进程才能恢复控制。
有人已经解决了这个问题吗?
当我试图在支持Bash的最新Windows 10版本上使用Oracle的JDK Linux版时,当尝试调用java
二进制文件时,我的提示符会出现挂起问题。
即使是输入如java -version
这样简单的命令,也会出现卡顿的情况,我必须终止进程才能恢复控制。
有人已经解决了这个问题吗?
我想澄清的是,截至2016年12月9日,您肯定可以在Windows 10的Ubuntu Bash上安装Java 8,并且@Karl Horton是正确的。
您需要安装unzip sudo apt-get install unzip
将此脚本复制到Bash for 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,然后您就可以继续进行了。
unzip
,因为它不是默认安装的”这句话到脚本说明中。 - Riversudo: unable to resolve host DESKTOP-6PMR0AI
。 - samthebest据@noah-david建议,似乎在2017年8月份已经有了更简单的解决方案。
我能够从“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
sudo add-apt-repository ppa:webupd8team/java
。 - kaliatech我一定是漏了什么...我所做的只是:
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)
sudo apt-get install default-jdk
命令,并安装了OpenJDK 11。 - Steffen Roller/r
)需要替换为Linux换行符。此外,我发现先下载所需的zip文件并将它们与脚本放在一起更加直接。以下是我做的全部内容:
bash
中输入 sudo apt-get install zip unzip
确保 unzip/zip 已安装在您的 bash
控制台上。bash
中访问的计算机上的某个文件夹中。注意:不要更改文件名,以确保它与脚本一起工作。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
文件在同一文件夹中。
因为该文件带有 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
java_install_predownloaded_unix_final.sh
的文件,这是我们“清理”后的版本,不包含 Windows 行尾,所以您只需在 bash
中执行 ./java_install_predownloaded_unix_final.sh
,就能看到魔法发生了。嘿,您现在已经在 Windows 上的 bash 实例中安装了 Java!sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
接受许可证
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)
附言:在撰写本文时,稳定版本的Oracle 9 JDK已发布,您可能需要微调上述第4步。
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
$ 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
我还没有真正测试过这个安装,但是这比以前的卡顿要好。
似乎在WSL的Build#14316上安装JDK8目前无法工作。但是我尝试安装JDK7时顺利完成了。目前正在探索此安装的限制,并将随时发布更新。
Idea来自于这里:https://github.com/Microsoft/BashOnWindows/issues/196
# 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是一个Windows二进制文件,因此需要.exe
。当使用OpenJDK的Linux版本时,不需要任何扩展名。
这对我很有用。虽然,我不喜欢添加这些奇怪的仓库。Linuxuprising?如果微软能够修复这个问题就太好了。
sudo add-apt-repository ppa:linuxuprising/java
sudo apt update
sudo apt install oracle-java10-installer
根据以上所有答案和评论,我们试着把它们结合起来形成一份完整的指南。
在WSL2 Linux中直接安装JDK非常简单,因此我们跳过这个选项。
可以完全使用/共享Windows JDK与WSL2 Linux,只需要在Linux shell配置文件(例如我的~/.bashrc
)中设置两个东西:JAVA_HOME
和PATH
。
默认情况下,Windows Java安装在此处(版本可能不同):C:\Program Files\Java\jdk1.8.0_321
在WSL2中,可以通过以下格式访问此Windows文件位置:/mnt/c/Program Files/Java/jdk1.8.0_321
因此,
编辑此文件,
$ sudo nano ~/.bashrc
在底部添加以下内容:
export JAVA_HOME="/mnt/c/Program Files/Java/jdk1.8.0_321"
export PATH=$JAVA_HOME/bin:$PATH
export alias java='java.exe'
export alias javac='javac.exe'
通过 Ctrl/CMD + O
保存,然后按 Enter
通过 Ctrl/CMD + X
退出 nano 编辑器
刷新配置文件以加载添加的变量,使用
$ source ~/.bashrc
完成了。您现在可以通过执行
$ java -version
来验证它是否正常工作。它会给你类似于以下的输出:
java version "1.8.0_321"
Java(TM) SE Runtime Environment (build 1.8.0_321-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.321-b07, mixed mode)
在这里你总共做了三件事情:
验证方法如下:
$ echo $JAVA_HOME
/mnt/c/Program Files/Java/jdk1.8.0_321
验证方法如下:
$ echo $PATH
/mnt/c/Program Files/Java/jdk1.8.0_321/bin:...
java
一样调用它,而不是使用java.exe
验证方法:
$ java -version
java version "1.8.0_321"
Java(TM) SE Runtime Environment (build 1.8.0_321-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.321-b07, mixed mode)
不幸的是,这会让你执行类似于which java
的操作。为了像本机Linux软件一样执行此操作,您可能需要按照此处的进一步步骤(未经验证): https://dev59.com/uV4d5IYBdhLWcg3wAOVw#64489793 但实际上您并不需要这样做,因为这只能告诉您从Windows借来的java在哪里,没有其他作用。