繁体   English   中英

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

[英]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”,这是刚刚安装的新版本。

  1. Go 到搜索栏 > 类型 > env
  2. 单击菜单“编辑系统环境变量”
  3. 高级选项卡 > 单击“环境变量...”按钮
  4. 在“系统变量”> select“路径”> 点击“编辑”
  5. 寻找 Java 路径如“C:\Program Files\Java\jdk-19\bin”
  6. 使用“上移”或“下移”按钮将路径移动到“%SystemRoot%\system32”路径之前的 position
  7. 确定 > 确定

试试命令agian。 希望这可以帮助你们。

我猜当您编写javac ,它从jre7获取您当前用于开发目的的值,而当您编写java version ,它正在从jre8中获取当前正在使用的version的值在您的系统上安装了应用程序,因为您在用于开发的jre7之前提到了系统的JRE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM