尽管“java”命令在 Powershell 中有效,但在 WSL 上找不到命令“java”

Thi*_* B. 2 java jdk windows-subsystem-for-linux

这个主题可能是一个常见的主题,但是在网上查找时,我没有看到太多与我的案例相关的内容,因为我运行的不是普通的 ubuntu,而是 WSL(适用于 Linux 的 Windows 子系统)。

所以我的问题是我最近从 java 8 切换到 java 17 (我需要 java 8 课程),但我注意到在 ubuntu 终端上,java -version仍然显示openjdk-1.8.(something),而不是jdk-17类似的东西。

所以我认为卸载 openjdk 就可以解决问题,我对sudo apt-get autoremove openjdk-8-jre. 但是,现在java在 ubuntu 终端中输入根本不再起作用,并显示:Command 'java' not found, but can be installed with: ...。但我担心使用这些命令之一安装它会安装新版本的 java,而不是使用已经安装的版本。

我已经将JAVA_HOME变量设置为java安装目录,即mnt/c/Program Files/Java/jdk-17.0.1,但Program Files中的空间似乎确实是一个问题。

我怎样才能解决这个问题?与 Powershell 或 cmd 相比,我通常更喜欢使用 bash 终端,因为我更了解这些命令,因此无法在 bash 中使用javajavac对我来说是一个问题。谢谢!

coc*_*mac 5

WSL 有一些……独特的东西在这里很重要。.exe首先,如果您输入 Windows 端但来自 WSL的名称,它将起作用。例如,在 WSL 中打开 Bash 提示符,键入notepad.exe,然后按 Enter。记事本将打开。

在卸载 OpenJDK 8 之前,您已经openjdk-8-jre安装在 WSL 中,并且Java 17 安装在 Windows 中。当您java从 Windows 调用时,它足够智能地添加.exe,并运行 Java 的 Windows 副本。但是,当您切换到 WSL 时,当您输入 时java,它会运行 Linux 版本。但是,如果您输入 (到 WSL) java.exe,它将从 WSL 启动 Windows 版本的 Java,其原因与记事本的工作原理相同。

如果我想从 WSL 进行 Java 开发,我会完全卸载 Windows 版本的 Java,在 WSL 中安装我想要的 Java 版本 ( sudo apt update && sudo apt install openjdk-17-jre),然后通过 WSL Java 编译器在 WSL 中进行开发。

  • 我会卸载 Windows java,然后只需“sudo apt install openjdk-17-jdk”。如果你打算在Linux中开发,最好使用Linux版本的Java。从技术上讲,从 WSL 调用 Windows 编译器理论上是可行的,但它可能会产生意外问题,例如行结尾,因此我只需卸载 Windows Java 并在 Ubuntu 中安装 JDK。 (2认同)