在WSL中,你必须使用javac.exe,因为它是一个Windows二进制文件。仅仅输入javac是不起作用的,即使路径设置正确。如果这样还不起作用,尝试在JAVA_HOME变量的末尾添加../bin。
在WSL中使用Windows二进制文件和环境变量
有一种更简单的方法可以使Windows和WSL使用相同的JavaSDK二进制文件,你只需要先设置一些东西。最重要的是,如果你在Windows上安装了JavaSDK,你不需要安装Linux二进制文件。
检查WSL权限和目录链接(可选,但建议)
在WSL中,列出PC上的符号链接:
ls -l /mnt
如果任何驱动器的所有者是
root
,请在
/mnt/c/Users/<UserName>
中进行WSL开发工作。
个人而言,我会在Windows中创建一个开发目录,并在WSL中添加一个符号链接到该目录。
ln -s /mnt/d/dev/environment/ ~/dev
cd dev
现在将您带到您的开发目录。
确保Windows上的Java工作正常
从任何目录打开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中设置变量
最好的地方是将下面的代码放在你的.bashrc文件中,但如果你有一个./bash_profile或/etc/profile的结构设置,你也可以把它放在那里。
export JAVA_HOME=/mnt/d/Java/jdk11.0.4_10
顺便说一下,我们也加上Maven吧。
export MAVEN_HOME=/mnt/d/software/apache-maven-3.6.2
我在我的第二个硬盘上设置了我的WSL、Java和所有其他开发工具,这个硬盘不是系统驱动器,请确保您的位置与Windows中的JAVA_HOME路径匹配。
例如,如果在Windows中,Java位于:C:\Java\jdk8.0
相应的WSL挂载点是:/mnt/c/Java/jdk8.0
执行
重要提示:在WSL中使用java.exe 而不是java
假设您刚刚编写了CompareTwoStrings.class,并希望使用Windows的二进制文件进行编译和运行。您可以从Windows shell或WSL中执行。
Windows PowerShell/cmd:
javac GetStringLength.java
java GetStringLength
WSL:
javac.exe GetStringLength.java
java.exe GetStringLength
在WSL中使用
java <args>
会导致
Command 'java' not found
错误。这是因为在WSL中运行Windows二进制文件需要使用
.exe
扩展名作为命令。此外,请确保您的导出语句末尾没有任何空格或分号,因为这会导致运行依赖于Java的任何内容时出错。
简单性
我们不想在WSL中安装第二份专门针对WSL的Java副本并浪费宝贵的磁盘空间,所以我们将从WSL shell调用Windows二进制文件。这是WSL的一个巨大优势,特别是WSL1,它可以(几乎)无缝地与Windows文件系统交互。
为了保持Windows和WSL之间的命令一致,您可以在.bashrc
文件中添加一个别名,其中java = java.exe
和javac = javac.exe
。
注意:为了运行程序,它必须是一个Path
变量,或者从包含它的文件夹中运行。
希望这对你来说像对我一样容易。只需记住根据你运行的操作系统二进制文件使用正确的命令。我花了大约10分钟来设置它,它对于交叉编译和使用的便利性真是救命稻草。
javac.exe
命令。建议使用WSLENV
环境变量。链接:https://learn.microsoft.com/en-us/windows/wsl/interop - Biswapriyo