【问题标题】:Java versions don't match between command prompt and STSJava 版本在命令提示符和 STS 之间不匹配
【发布时间】:2021-02-19 20:39:59
【问题描述】:

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

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 Tool Suite > 右键单击​​项目资源管理器上的项目名称 > 在 > 终端中显示 > 并键入相同的命令(在与上述完全相同的文件夹中):

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;

【问题讨论】:

  • 命令提示符中的PATH 与STS 终端中的PATH 不同。检查PATH是两者的区别。
  • 两者的路径相同。该命令正在应用程序根文件夹上运行。
  • 由于java命令是通过搜索PATH找到的,如果PATH相同,他们会找到相同版本的Java。请注意,我不是在谈论当前文件夹的“路径”,而是在谈论名为 PATH 的环境变量。
  • 我明白了。你说的“一样”是什么意思? 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; %JAVA_HOME%\bin。并且 JAVA_HOME 变量指向 C:\Program Files\Java\jdk-11.0.8。
  • 每个进程都有自己的一组环境变量,因此每个进程可能有不同的Path 变量值。 STS 可能更改了Path,因此STS 终端中Path 的值将不同于您在命令提示符中看到的值。好吧,如果您在 STS 终端中查看它。

标签: java spring-boot command-line spring-tool-suite


【解决方案1】:

免责声明:以下答案适用于 Windows,并且测试是使用面向企业 Java 开发人员的 Eclipse IDE 2020-12 完成的。

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

eclipse.ini 文件中,您(可以)使用-vm 选项指定用于运行Eclipse 本身的Java 安装。见: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 不受影响,即它将与命令提示符看到的PATH 相同。

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

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

【讨论】:

  • 酷。我打开 SpringToolSuite4.ini 并将 -vm plugins/org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_14.0.2.v20200815-0932/jre/bin 替换为 C:\Program Files\Java\jdk-11.0.8\bin 并且它起作用了!现在当我去终端输入java -version时,我得到java version "11.0.8" 2020-07-14 LTS。回答接受。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2014-09-17
  • 2016-10-25
  • 2015-04-02
  • 1970-01-01
  • 1970-01-01
  • 2020-03-15
  • 2020-09-21
  • 2014-04-25
相关资源
最近更新 更多