java -version和javac -version显示不同的版本
我在我的Windows系统上安装了java 7
和java 8
,在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)
知道这可能是什么问题吗?
编辑已安装的文件夹:
还有一件事, echo %PATH%
只有一次出现JDK
,这是针对java 7
而且没有发现JRE
。
问题很可能是因为你的JDK
之前的path
有一个JRE
。 当我们在path
添加JDK并且不删除以前添加的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.
好的,正如你所说的那样,你的路上没有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" %*
并且您可以将其命名为java.bat
(如果您在同一目录中它将起作用,或者在C:\Windows\System32\java.exe
之前将其放在PATH
,或者您可以将其命名为java7.bat
并将其放在任何位置如果您愿意,可以运行Java 7 JRE。
如果要在运行时更改JAVA_HOME
,则包装器也是一个不错的选择。
改变javac
运行
如果你想运行一个不同的javac
命中Windows + Pause
并打开系统对话框来更改PATH
那么它包含JDK 8的路径而不是你的JDK 7.你需要重新启动命令行才能显示更改。
要解决这种环境问题,我总是相信命令whereis,在windows下载whereis.exe然后在路径中设置并执行命令
where.exe是java.exe
哪里是javac.exe
您将很容易找到在环境中调用java的位置的确切路径以及javac。
我jre7
你编写javac
,它正在从jre7
获取当前正用于开发目的的值,当你编写java version
,它从jre8
获取version
的值,当前正在使用它在您的系统上安装了应用程序,因为您在用于开发的jre7
之前提到了系统的JRE
进入程序或执行系统调用后,系统首先查看当前目录,然后在PATH
,在与命令对应的可执行文件上从左到右检查每个目录。 当系统找到可执行文件时,运行它(停止查找)。
您在JRE之前已在PATH
环境变量中预安装了系统JRE,这是您需要的。
是的,确实,为了处理不匹配的版本,我们需要修改PATH变量,而where
命令(至少在Windows中)非常方便找出首先选择哪个程序。 然而,有一个转折:例如,当你在跑步后看到你的PATH var的内容时,
echo %path% > path.txt
你应该知道PATH实际上由两个部分组成:一个是系统路径 ,另一个是当前用户路径 ,它是首先被评估但最后打印的系统路径 。 因此,只要在系统路径中的某个地方存在旧版本的另一个地方,只需在一切之前为您的全新JDK设置一条路径就行了。
当您有诸如的条目时,这个特殊问题尤为常见
C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\ProgramData\Oracle\Java\javapath
在您的系统路径中 。 只需将它们移动到当前用户路径部分的尾部,即可使这些条目成为搜索队列中的最后一个条目。