![尽管“java”命令在 Powershell 中有效,但在 WSL 上找不到命令“java”](https://linux22.com/image/1185034/%E5%B0%BD%E7%AE%A1%E2%80%9Cjava%E2%80%9D%E5%91%BD%E4%BB%A4%E5%9C%A8%20Powershell%20%E4%B8%AD%E6%9C%89%E6%95%88%EF%BC%8C%E4%BD%86%E5%9C%A8%20WSL%20%E4%B8%8A%E6%89%BE%E4%B8%8D%E5%88%B0%E5%91%BD%E4%BB%A4%E2%80%9Cjava%E2%80%9D.png)
这个话题可能是一个常见的话题,但是当我在网上查看时,我没有看到太多与我的情况相关的内容,因为我运行的不是普通的 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中的空间似乎是一个问题。
我该如何解决这个问题?我通常更喜欢使用 bash 终端而不是 Powershell 或 cmd,因为我更了解这些命令,所以无法在 bash 中使用java
或javac
对我来说是个问题。谢谢!
答案1
这里有几个关于 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 启动 Java 的 Windows 版本,原因与记事本的工作方式相同。
如果我想从 WSL 进行 Java 开发,我会完全卸载 Windows 版本的 Java,在 WSL 中安装我想要的 Java 版本(sudo apt update && sudo apt install openjdk-17-jre
),然后通过 WSL Java 编译器在 WSL 中进行开发。
答案2
您可以在 WSL 中直接使用java.exe
而不是java
。我提供了命令,以便您可以
- 创建一个新的 java 文件(使用
nano <class_name>.java
) - 编译它(
javac.exe <class_name>.java
) - 运行并查看输出(
java.exe <class_name>
)
我运行了以下命令:
cd /mnt/c/users/adity/desktop
nano Basic.java
javac.exe Basic.java
java.exe Basic
文件中的代码Basic.java
:
public class Basic {
public static void main(String[] args) {
System.out.println("Hello World");
}
}