Java 命令提示符和 STS 之间的版本不匹配

Java versions don't match between command prompt and STS

如果我打开命令提示符,请转到我的应用程序文件夹并键入以下内容:

java -version

我会得到以下结果:

java version "11.0.8" 2020-07-14 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.8+10-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.8+10-LTS, mixed mode)

但是如果我转到 Spring 工具套件 > 在 Project Explorer 上右键单击项目名称 > 显示在 > 终端 > 并键入相同的命令(在与上面完全相同的文件夹中):

java -version

我得到了不同的结果:

openjdk version "14.0.2" 2020-07-14
OpenJDK Runtime Environment (build 14.0.2+12-46)
OpenJDK 64-Bit Server VM (build 14.0.2+12-46, mixed mode)

怎么可能?

在命令行中输入 echo %PATH% 时的结果:

C:\Program Files\Java\jdk-11.0.8;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\Oberthur Technologies\AWP\Dlls;C:\Program Files\Oberthur Technologies\AWP\Dlls;C:\Program Files\Git\cmd;C:\Program Files\Java\jdk-11.0.8\bin;C:\Program Files\apache-maven-3.6.3\bin;C:\Program Files\MySQL\MySQL Shell 8.0\bin\;C:\Users\Samsung\AppData\Local\Microsoft\WindowsApps;C:\Program Files\heroku\bin

在 STS 终端中输入 echo %PATH% 时的结果(与上述相同的文件夹):

C:/spring-tool-suite-4-4.8.0/contents/sts-4.8.0.RELEASE//plugins/org.eclipse.justj.openjdk.hotspot.jre.full.
win32.x86_64_14.0.2.v20200815-0932/jre/bin/server;C:/spring-tool-suite-4-4.8.0/contents/sts-4.8.0.RELEASE//p
lugins/org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_14.0.2.v20200815-0932/jre/bin;C:\Program File
s\Java\jdk-11.0.8;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Common Files\Ora
cle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerSh
ell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\Oberthur Technologies\AWP\Dlls;C:\Program File
s\Oberthur Technologies\AWP\Dlls;C:\Program Files\Git\cmd;C:\Program Files\Java\jdk-11.0.8\bin;C:\Program Fi
les\apache-maven-3.6.3\bin;C:\Program Files\MySQL\MySQL Shell 8.0\bin\;C:\Users\Samsung\AppData\Local\Micros
oft\WindowsApps;C:\Program Files\heroku\bin;C:\spring-tool-suite-4-4.8.0\contents\sts-4.8.0.RELEASE;

免责声明:以下答案是针对 Windows 的,测试是使用 Eclipse IDE 2020-12 为企业 Java 开发人员完成的。

经过一些测试,我发现了以下关于终端 PATH 的怪癖。

eclipse.ini 文件中,您(可以)指定使用 运行 Eclipse 本身的 Java 安装,使用 -vm 选项。参见:How to specify jdk path in eclipse.ini on windows 8 when path contains space

在旧版本的 Eclipse 上,该值未指定,这意味着 Eclipse 将使用默认的 Java 安装,即在 PATH 上找到的 Java 安装。在较新版本的 Eclipse 中,该值默认为作为 Eclipse 插件提供的 JRE。

如果 -vm 值为 目录 ,则在 Eclipse 中使用 Ctrl+Alt+T 打开终端时,该目录将添加到 PATH ,这意味着终端看到的 Java 版本将不同于在 Eclipse 外部打开的命令提示符中看到的版本。

如果 -vm 值是 javaw.exe 的完全限定名称,PATH 不受影响,即它将与 a 看到的 PATH 相同命令提示符。

要检查终端使用的 PATH,运行 命令 echo %PATH%。检查第一个条目,看它是否指特定的 Java 安装。

如果您想确保终端具有与您在命令提示符中看到的相同的 PATH,请将 -vm 选项的值更改为完全限定 javaw.exe