TL;DR:在 WSL 中,必须使用,因为它是 Windows 二进制文件。即使路径设置正确,仅键入也不起作用。如果这不起作用,请尝试添加到变量的末尾。javac.exe
javac
../bin
JAVA_HOME
在 WSL 中使用 Windows 二进制文件和环境变量
有一种更简单的方法可以使Windows和WSL使用相同的JavaSDK二进制文件,您只需要先设置一些东西。最重要的是,如果您在Windows上安装了JavaSDK,则无需安装Linux二进制文件。
检查 WSL 权限和目录链接(可选,但建议使用)
在 WSL 中,列出电脑上的符号链接:
ls -l /mnt
如果有任何驱动器归 所拥有,请在 中执行 WSL 开发工作root
/mnt/c/Users/<UserName>
就个人而言,我在Windows中创建一个开发目录,并在WSL中添加一个指向该目录的符号链接:
ln -s /mnt/d/dev/environment/ ~/dev
cd dev
现在将您带到您的开发目录。
确保 Java for Windows 正常工作
从任何目录打开 / 并输入:PowerShell
cmd.exe
java --version
您应该获得 JRE 信息列表:
openjdk 11.0.4 2019-07-16 LTS
OpenJDK Runtime Environment Corretto-11.0.4.11.1 (build 11.0.4+11-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.4.11.1 (build 11.0.4+11-LTS, mixed mode)
您的版本可能不同,重要的是系统知道在哪里可以找到Java。如果出现错误,请确保正确设置 Windows 环境变量:
- JAVA_HOME为环境变量,以及
- JAVA_HOME/bin 作为路径变量。
在 WSL 中设置变量
放置下一行代码的最佳位置是在您的文件中,但是如果您设置了 or 结构,则可以将其放在那里。.bashrc
./bash_profile
/etc/profile
# Shared environment variables
# Use 'java.exe <args>' to utilize Windows Java binaries from within WSL.
export JAVA_HOME=/mnt/d/Java/jdk11.0.4_10
当我们在这里时,让我们也添加Maven:
export MAVEN_HOME=/mnt/d/software/apache-maven-3.6.2
我在我的第二个HDD上设置了我的WSL,Java和所有其他开发工具,这不是系统驱动器,请确保您的位置与您在Windows中的JAVA_HOME路径相匹配。
例如,如果在Windows中,Java位于:相应的WSL挂载点是:C:\Java\jdk8.0
/mnt/c/Java/jdk8.0
执行
重要:在 WSL 中使用,而不是说你刚刚编写并希望使用 Windows 二进制文件编译和运行它。你可以从Windows shell或WSL做到这一点。java.exe <args>
java <args>
CompareTwoStrings.class
Windows PowerShell/cmd:
javac GetStringLength.java
java GetStringLength
WSL:
javac.exe GetStringLength.java
java.exe GetStringLength
在 WSL 中使用将导致错误。这是因为从 WSL 中运行 Windows 二进制文件要求在命令中使用.exe
扩展。java <args>
Command 'java' not found
单纯
我们不想安装特定于 WSL 的第二个 Java 副本并浪费宝贵的磁盘空间,因此我们将从 WSL shell 调用 Windows 二进制文件。这是 WSL(尤其是 WSL1)的一大优势,因为它可以(几乎)完美地与 Windows 文件系统进行交互。
注意:为了运行程序,它必须是一个变量,或者从它包含的文件夹中运行。Path
希望这对你和我一样容易。只需记住使用正确的命令,具体取决于您正在运行的操作系统二进制文件。这花了我大约10分钟来设置,并且一直是交叉编译和一般易用性的救星。