正在为 Linux 在 Windows 子系统上安装 Oracle JDK
Installing Oracle JDK on Windows subsystem for Linux
当尝试在支持 bash 的最新 Windows 10 版本上使用 Oracle JDK 的 Linux 版本时,我 运行每当尝试调用 java
二进制文件时提示挂起的问题。
即使输入像 java -version
这样简单的东西也会挂起,我必须终止进程才能恢复控制。
有人成功了吗?
目前似乎无法在 WSL 的 Build#14316 上安装 JDK8。但是尝试安装 JDK7 对我来说效果很好。目前正在探索此安装的限制,并将继续发布。
想法来自这里:https://github.com/Microsoft/BashOnWindows/issues/196
好像是javaoracle版本的问题,我已经下载了openJDK版本,现在可以了
我在这里确认 Oracle JDK 版本 8u102,linux 的 x64 可以在 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
我还没有机会真正强调这个安装,但这比以前的挂起要好。
它可能适用于 Insider Preview build 14905,但在 Windows 10 Pro build 14393 上挂起。问题的很大一部分是 Microsoft 使用的是 Ubuntu 14.0.4。 14.10 或更高版本可能会更好地支持 Java 8.
我想澄清的是,从 2016 年 12 月 9 日起,您肯定可以在 Ubuntu Bash 上安装 Java 8 for Windows 10 并且@Karl Horton是正确的。
您需要安装 unzip sudo apt-get install unzip
将此脚本复制到您的 bash 的某个位置,用于 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你应该可以开始了。
我使用了@fieldju 给出的脚本,但他遗漏了脚本所依赖的一些东西,而且 copy/pasting 内容导致 windows 行 endings/carriage returns (/r
) 需要替换为 linux returns。此外,我发现首先下载所需的 zip 并将它们放在脚本旁边要简单得多。这是我所做工作的完整列表:
- 在
bash
中,键入 sudo apt-get install zip unzip
以确保 unzip/zip 安装在您的 bash
控制台上
- 从oracle website下载最新的Linux版本的JavaJDK(我是64位系统所以选择了“Linuxx64 ") 并将其保存在您计算机上某个您可以在
bash
中访问的文件夹中注意:不要更改文件名以确保它与脚本一起工作
- 将 unlimited strength policy 单独下载到与上一个 zip 相同的文件夹中,再次确保保留文件名 as-is.
- 将以下脚本复制并粘贴到记事本中,并将其另存为
java_install_predownloaded.sh
与 zips 一起保存在同一文件夹中:
脚本:
#!/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 的修改版本,它假定 zips 已经下载并且与此 .sh
文件位于同一文件夹中
因为文件有 windows 回车 returns 你需要确保它们被替换,所以在 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
的文件将位于我们的 'cleaned' 版本的文件夹中,没有 windows 行结尾,所以你只需要在 bash
中执行 ./java_install_predownloaded_unix_final.sh
并观看魔术发生。嘿 Presto 你现在已经在 windows! 上的 bash 实例上安装了 java
我一定是遗漏了什么...我所做的只是:
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)
在 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
我在 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 步。
这对我有用。不过,我不喜欢添加这些奇怪的存储库。 Linux 崛起?
如果微软能解决这个问题就好了。
sudo add-apt-repository ppa:linuxuprising/java
sudo apt update
sudo apt install oracle-java10-installer
我遇到了同样的问题,但我用一个命令解决了它:
sudo apt upgrade
然后 运行 这 3 个命令:
sudo apt install default-jre
sudo apt install openjdk-11-jre-headless
sudo apt install openjdk-8-jre-headless
许多答案都建议安装 Linux JDK,即使他们有一个非常好的 Windows JDK。 WSL 的美妙之处在于让您不必做这样的事情,因为文件系统是可互操作的。只要您将文件扩展名考虑在内(如下所述),您只需在特定情况下安装两者。
直接的方法
您可以通过将以下代码行添加到您的 .bashrc
文件中来非常简单地完成此操作,假设您的 Windows 环境变量设置正确并且 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 发行版时,不需要扩展..
本文参考了上述所有答案和评论,并试图将其整合为一个完整的指南。
直接在 WSL2 Linux 中安装 jdk 很简单,因此我们在这里跳过此选项。
使用 WSL2 Linux use/share Windows JDK 完全没问题,你只需要设置两个东西,JAVA_HOME
和 PATH
在你的 Linux shell 个人资料中,在我的例子中,~/.bashrc
.
第 1 步:检查您的 Windows Java 位置
默认安装在这里(版本可能不同)C:\Program Files\Java\jdk1.8.0_321
WSL2 将能够以 /mnt/c/Program Files/Java/jdk1.8.0_321
格式访问此 Windows 文件位置
因此,
第 2 步:使用您的 shell 配置文件加载此文件,
编辑此文件,
$ 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
退出纳米编辑器
通过
刷新配置文件以加载添加的变量
$ 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)
总结
你在这里一共做了三件事,
- 将您的 $JAVA_HOME 定义为使用 jdk
的 Windows 安装
验证这一点:
$ echo $JAVA_HOME
/mnt/c/Program Files/Java/jdk1.8.0_321
- 定义了一个用户范围 $PATH 变量,让应用程序知道在哪里可以找到 java 编译器
验证这一点:
$ echo $PATH
/mnt/c/Program Files/Java/jdk1.8.0_321/bin:...
- 通过调用
java
而不是 java.exe
来设置调用 java 的别名,就像您直接在 Linux 上调用它一样
验证这一点:
$ 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 软件执行此操作,您可能需要按照此处的进一步步骤操作(未验证): 但是您真的不需要它,因为它不会做任何事情不仅仅是告诉你从 Windows.
那里借来的 java 在哪里
当尝试在支持 bash 的最新 Windows 10 版本上使用 Oracle JDK 的 Linux 版本时,我 运行每当尝试调用 java
二进制文件时提示挂起的问题。
即使输入像 java -version
这样简单的东西也会挂起,我必须终止进程才能恢复控制。
有人成功了吗?
目前似乎无法在 WSL 的 Build#14316 上安装 JDK8。但是尝试安装 JDK7 对我来说效果很好。目前正在探索此安装的限制,并将继续发布。 想法来自这里:https://github.com/Microsoft/BashOnWindows/issues/196
好像是javaoracle版本的问题,我已经下载了openJDK版本,现在可以了
我在这里确认 Oracle JDK 版本 8u102,linux 的 x64 可以在 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
我还没有机会真正强调这个安装,但这比以前的挂起要好。
它可能适用于 Insider Preview build 14905,但在 Windows 10 Pro build 14393 上挂起。问题的很大一部分是 Microsoft 使用的是 Ubuntu 14.0.4。 14.10 或更高版本可能会更好地支持 Java 8.
我想澄清的是,从 2016 年 12 月 9 日起,您肯定可以在 Ubuntu Bash 上安装 Java 8 for Windows 10 并且@Karl Horton是正确的。
您需要安装 unzip sudo apt-get install unzip
将此脚本复制到您的 bash 的某个位置,用于 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你应该可以开始了。
我使用了@fieldju 给出的脚本,但他遗漏了脚本所依赖的一些东西,而且 copy/pasting 内容导致 windows 行 endings/carriage returns (/r
) 需要替换为 linux returns。此外,我发现首先下载所需的 zip 并将它们放在脚本旁边要简单得多。这是我所做工作的完整列表:
- 在
bash
中,键入sudo apt-get install zip unzip
以确保 unzip/zip 安装在您的bash
控制台上 - 从oracle website下载最新的Linux版本的JavaJDK(我是64位系统所以选择了“Linuxx64 ") 并将其保存在您计算机上某个您可以在
bash
中访问的文件夹中注意:不要更改文件名以确保它与脚本一起工作 - 将 unlimited strength policy 单独下载到与上一个 zip 相同的文件夹中,再次确保保留文件名 as-is.
- 将以下脚本复制并粘贴到记事本中,并将其另存为
java_install_predownloaded.sh
与 zips 一起保存在同一文件夹中:
脚本:
#!/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 的修改版本,它假定 zips 已经下载并且与此 .sh
文件位于同一文件夹中
因为文件有 windows 回车 returns 你需要确保它们被替换,所以在
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
的文件将位于我们的 'cleaned' 版本的文件夹中,没有 windows 行结尾,所以你只需要在bash
中执行./java_install_predownloaded_unix_final.sh
并观看魔术发生。嘿 Presto 你现在已经在 windows! 上的 bash 实例上安装了 java
我一定是遗漏了什么...我所做的只是:
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)
在 2017 年 8 月,解决方案似乎更简单,正如@noah-david 所建议的那样。
我能够从 “WebUpd8” team repository.
安装 Oracle JDK 8Instructions。要添加存储库:
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
我在 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 步。
这对我有用。不过,我不喜欢添加这些奇怪的存储库。 Linux 崛起? 如果微软能解决这个问题就好了。
sudo add-apt-repository ppa:linuxuprising/java
sudo apt update
sudo apt install oracle-java10-installer
我遇到了同样的问题,但我用一个命令解决了它:
sudo apt upgrade
然后 运行 这 3 个命令:
sudo apt install default-jre
sudo apt install openjdk-11-jre-headless
sudo apt install openjdk-8-jre-headless
许多答案都建议安装 Linux JDK,即使他们有一个非常好的 Windows JDK。 WSL 的美妙之处在于让您不必做这样的事情,因为文件系统是可互操作的。只要您将文件扩展名考虑在内(如下所述),您只需在特定情况下安装两者。
直接的方法
您可以通过将以下代码行添加到您的 .bashrc
文件中来非常简单地完成此操作,假设您的 Windows 环境变量设置正确并且 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 发行版时,不需要扩展..
本文参考了上述所有答案和评论,并试图将其整合为一个完整的指南。
直接在 WSL2 Linux 中安装 jdk 很简单,因此我们在这里跳过此选项。
使用 WSL2 Linux use/share Windows JDK 完全没问题,你只需要设置两个东西,JAVA_HOME
和 PATH
在你的 Linux shell 个人资料中,在我的例子中,~/.bashrc
.
第 1 步:检查您的 Windows Java 位置
默认安装在这里(版本可能不同)C:\Program Files\Java\jdk1.8.0_321
WSL2 将能够以 /mnt/c/Program Files/Java/jdk1.8.0_321
因此,
第 2 步:使用您的 shell 配置文件加载此文件,
编辑此文件,
$ 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
通过
刷新配置文件以加载添加的变量$ 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)
总结
你在这里一共做了三件事,
- 将您的 $JAVA_HOME 定义为使用 jdk 的 Windows 安装
验证这一点:
$ echo $JAVA_HOME
/mnt/c/Program Files/Java/jdk1.8.0_321
- 定义了一个用户范围 $PATH 变量,让应用程序知道在哪里可以找到 java 编译器
验证这一点:
$ echo $PATH
/mnt/c/Program Files/Java/jdk1.8.0_321/bin:...
- 通过调用
java
而不是java.exe
来设置调用 java 的别名,就像您直接在 Linux 上调用它一样
验证这一点:
$ 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 软件执行此操作,您可能需要按照此处的进一步步骤操作(未验证): 但是您真的不需要它,因为它不会做任何事情不仅仅是告诉你从 Windows.