java -version和javac -version显示不同的版本

Spa*_*kOn 23 java

java 7java 8在我的Windows系统上同时安装C:\Program Files\Java

在环境的路径中,我指定了这样的路径java 7.

%JAVA_HOME%/bin 哪里 JAVA_HOME = C:\Program Files\Java\jdk1.7.0_17

但是,当我输入javac -version它显示javac 1.7.0_17哪些是有道理的

但是当我这样做的 java -version时候

java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

知道这可能是什么问题吗?

编辑已安装的文件夹: 在此输入图像描述

还有一件事echo %PATH%只发生了一次JDK,java 7并没有JRE发现它.

Mus*_*bir 19

这个问题很可能是因为你JRE在你path之前有一个JDK.这通常发生在我们添加JDK path并且不删除以前添加的JRE时.因此当你这样做java时指向JRE,当你这样做javac时指向另一个版本/ JDK(因为jre中没有javac)

编辑: - 由于您编辑了问题并且在路径中发布了没有任何JRE,您可以%JAVA_HOME%先将其复制并粘贴到路径变量中(确保它在system32路径之前),我之前遇到过这个问题(安装android sdk时)并且这样做解决了它.

这里也找到了可能的解释: -

JRE also puts a java.exe to c:\Windows\System32, that's how first command is resolved. Second command is resolved by the C:\Program Files\Java\jdk1.7.0_02\bin entry in your PATH variable. If (and when) you are developing from the command prompt, you have to adjust the PATH variable so that C:\Program Files\Java\jdk1.7.0_02\bin is before c:\Windows\System32.


小智 9

转到 Windows 机器中的环境变量。在用户变量中:确保将 - 您的用户变量“JAVA_HOME”值设置为“C:\Program Files\Java\jdk-xxxx\bin”,其中“jdk-xxx”是您的 jdk 版本。

在系统变量中: - 将相同的“C:\Program Files\Java\jdk-xxxx\bin”值添加到“Path”变量。确保将附加值移至所有值之上。

现在尝试运行 java -version 和 javac -version。为我工作。:) 这里我链接了我的截图


The*_*tor 7

好吧,正如你所说,你的路上没有JRE,我认为where java(如果你有Windows 7)会给你C:\Windows\System32\java.exe.

改变java跑步

尝试使用控制面板中的Java-Settings对话框更改当前处于活动状态的Java System Version.这应该改变版本java -version返回.如果这不起作用,您可能需要重新安装要运行该java命令的Java版本,明确指定路径,编写自己的包装器(如果您与包装器位于同一目录中,则可以使用)或放置C:\Windows\System32\进入路径之前的JRE路径(不知道最后一个选项是否真的很好).

包装器看起来像这样:

@"C:\Program Files\Java\jre7\bin\java.exe" %*
Run Code Online (Sandbox Code Playgroud)

并且您可以命名它java.bat(如果您在同一目录中它将起作用,或者在它PATH之前放入它C:\Windows\System32\java.exe或者您可以java7.bat将其命名并将其放在路径上的任何位置以便能够运行Java 7 JRE,如果您希望这样做.

如果要更改JAVA_HOME运行时,包装器也是一个不错的选择.

改变javac跑步

如果要运行其他javac命中Windows + Pause并打开系统对话框进行更改,PATH则它包含JDK 8的路径而不是JDK 7.您需要重新启动命令行才能显示更改.

  • java路径有时真的很痛苦 (3认同)

bor*_*nac 7

这都是关于$JAVA_HOME系统变量

就我而言

对于Windows
(移动 jdk8 -> jdk9 -> jdk11)我在 PATH 中留下了 jdk8 的垃圾(在 JAVA_HOME:"C:\path\java11" 之前)

所以我只是 从系统变量中删除 C:\ProgramData\Oracle\Java\javapath_jdk8

// 或者将其放在javapath_jdk11下面

对于MAC,
编辑 .zshrc 以具有

export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-???.jdk/Contents/Home"
Run Code Online (Sandbox Code Playgroud)


nob*_*alG -2

我想当您编写时,它会从中获取您当前用于开发目的的javac值,而当您编写时,它会从您系统上已安装的应用程序当前正在使用的值中获取值,因为在您用于开发的系统之前提到过您的系统jre7java versionversionjre8JREjre7

  • 这是评论而不是答案。 (2认同)