当尝试在支持bash的最新Windows 10版本上使用Linux版本的Oracle JDK时,我在尝试调用java
二进制文件时遇到提示挂起的问题。
即使像java -version
那样简单的打字也会挂起,我必须终止该过程才能恢复控制。
任何人都有这个工作吗?
答案 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返回。此外,我发现首先下载所需的拉链并将它们放在脚本旁边会更直接。以下是我所做的完整清单:
bash
中,键入sudo apt-get install zip unzip
以确保bash
控制台上安装了解压缩/ zip bash
注意:请勿更改文件名以确保其适用于脚本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
此代码是@fieldju的修改版本,它假定已经下载了拉链并且与此.sh
文件位于同一文件夹中
因为文件有窗口回车,你需要确保它们被替换,所以在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行结尾,因此您只需要在{{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所采取的步骤:
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)
P.S。在撰写本文时,已发布稳定版Oracle 9 JDK,您可以调整上面的第4步。
答案 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