[英]java -version and javac -version showing different versions
I have java 7
and java 8
both installed on my windows system under 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
。
出现该问题的原因很可能是因为您的PATH
有一个JRE ,在您的JDK之前。 当我们在PATH
添加 JDK 并且不删除之前添加的 JRE 时,通常会发生这种情况。 因此,当您执行java
它指向 JRE,而当您执行javac
它指向另一个版本/JDK(因为 JRE 中没有javac
)
如果您的路径中没有任何 JRE,那么您可以复制您的%JAVA_HOME%
并将其首先粘贴到您的路径变量中(确保它在system32
路径之前)。
这个答案解释了为什么会起作用的一个可能原因:
JRE 还将
java.exe
放入c:\\Windows\\System32
,这就是第一个命令的解析方式。 第二个命令由PATH
变量中的C:\\Program Files\\Java\\jdk1.7.0_02\\bin
条目C:\\Program Files\\Java\\jdk1.7.0_02\\bin
。 如果(以及何时)您从命令提示符进行开发,则必须调整PATH
变量,以便C:\\Program Files\\Java\\jdk1.7.0_02\\bin
位于c:\\Windows\\System32
。
转到 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。 为我工作。 :)这里我链接了我的截图
好的,正如你所说的,你的路径上没有 JRE,我假设where java
(如果你有 Windows 7)会给你C:\\Windows\\System32\\java.exe
。
java
运行尝试使用控制面板中的 Java 设置对话框更改当前处于活动状态的 Java 系统版本。 这应该会更改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中执行相同操作,然后在路径中设置并执行命令
哪里有java.exe
javac.exe在哪里
您将很容易找到在环境中调用 java 的位置以及 javac 的确切路径。
我的情况(移动 jdk8 -> jdk9 -> jdk11)我在 PATH 中有 jdk8 留下的垃圾(在 JAVA_HOME:"C:\\path\\java11" 之前)
所以我只是从系统变量中删除C:\\ProgramData\\Oracle\\Java\\javapath_jdk8
// 或者把它放在 javapath_jdk11 下面
是的,这是事实,为了对付不匹配的版本中,我们需要修改PATH变量, where
命令(至少在Windows)是非常方便的找出哪些程序被第一次拿起。 但是,有一个转折点:例如,当您在运行后查看 PATH var 的内容时,
echo %path% > path.txt
您应该知道 PATH 实际上由两个部分组成:一个是System PATH另一个是Current User PATH ,它是System Path首先评估但最后打印。 因此,只要在System PATH 的某处有另一个旧版本的地方,简单地在所有内容前面放置一条指向您的全新 JDK 的路径将是无用的。
当您有以下条目时,此特定问题尤其常见
C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\ProgramData\Oracle\Java\javapath
在您的系统路径中。 只需将它们移动到当前用户路径部分的尾部,使这些条目成为搜索队列中的最后一个。
在 Windows 机器的环境变量下检查您的 JAVA_HOME 变量。 确保它指向您想要的版本。 接下来检查添加到“路径”环境变量中的 java jdk 路径。 确保它是您想要的版本,否则将其更改为您的 JDK 版本路径,然后将其移动到路径变量值列表的顶部。 这应该将您想要的版本标记为第一选择,所有问题都将得到解决。 我这样做了,一切都很好。
请检查您是否已替换“C:\\ProgramData\\Oracle\\Java\\javapath;” 使用 %JAVA_HOME%/bin 在 PATH 变量中。 这对我有用。
对于 LINUX 用户
如果 java 和 javac 显示不同的版本,那么您可以轻松地将它们设置为正确或相同的版本
第1步
sudo update-alternatives --config java
输出 :
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-11-openjdk-amd64/bin/javac 1111 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/javac 1111 manual mode
* 2 /usr/lib/jvm/java-8-openjdk-amd64/bin/javac 1081 manual mode
这将显示以下结果, start(*) 表示您的系统正在使用的javac版本。 您可以通过选择所需的版本来更改它。
第2步
sudo update-alternatives --config java
输出 :
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode
* 2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
现在,您可以再次选择要为java运行的版本。
这样您就可以确保 java 和 javac 具有相同的版本。
带有已接受答案的附注。 我无法留下 java-1.8.0 的踪迹,但我已经安装了 java 17 并想要 java "17",因此,我将 java 17 bin 路径放在路径变量、Home 变量和用户变量,之后当我输入 cmd 时: java -version
,它也显示 java-1.8.0,然后我重新启动 cmd,重新启动 Intellij ide,然后我输入java -version
,然后它显示:
java version "17" 2021-09-14 LTS
Java(TM) SE Runtime Environment (build 17+35-LTS-2724)
Java HotSpot(TM) 64-Bit Server VM (build 17+35-LTS-2724, mixed mode, sharing)
当我输入:
C:\Users\dell>javac -version
表明 :
javac 17
这是我的路径变量 ScreenShots 和命令窗口:
我有类似的情况,但两个命令javac --version
都显示 sdk 的旧版本。 它显示“javac 11.0.8”,即使它应该是“javac 19”,这是刚刚安装的新版本。
试试命令agian。 希望这可以帮助你们。
我猜当您编写javac
,它从jre7
获取您当前用于开发目的的值,而当您编写java version
,它正在从jre8
中获取当前正在使用的version
的值在您的系统上安装了应用程序,因为您在用于开发的jre7
之前提到了系统的JRE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.