多个"JDK"版本,应该执行哪个"java.exe"文件?

3

我安装了多个版本的JDK,包括1.6、 1.7和1.8。

当我运行需要JRE的软件时, 我想知道会执行哪个版本的java.exe文件。我进行了一些测试,如下:

测试:

cmd.exe命令: echo %java_home%
输出: java version "1.8.0_31"


cmd.exe命令: java -version
输出: java version "1.8.0_31"


然后我在HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\1.8中检查注册表,并获得javaHome键值
结果: C:\Program Files\Java\jdk1.8.0_31.


Java代码: System.out.println(System.getProperty("java.home"));
输出: C:\Program Files (x86)\Java\jdk1.7.0_15\jre


最后,我打开任务管理器,搜索java.exe进程并定位java.exe目录:
结果: C:\Program Files (x86)\Java\jdk1.7.0_15\bin


问题:

我不确定计算机选择哪个java.exe文件。你能帮忙吗?


另外,您在哪里运行Java代码?您的编辑器/IDE可能还具有指定要使用哪个JRE来执行代码的属性。 - Ewald
你在IDE(如eclipse)中运行了System.out代码吗? - hinneLinks
你在IDE中“运行Java代码”吗? - miracle_the_V
请检查您的PATH和JAVA_HOME环境变量,并根据需要进行设置。 - Zia
Java 1.7 JRE(如在任务管理器中找到)是如何启动的?如果是从命令行执行的,那么它应该是1.8版本,因为java -version报告的是这个版本。否则,启动JRE的程序(运行任何类)负责并且可能固定在1.7版本上。如果它是作为从资源管理器运行JNLP / JWS(例如)文件的结果启动的,则会查询适当的Shell Open注册表配置。 - user2864740
显示剩余3条评论
2个回答

1

被动方法

你可能想知道where命令行工具的作用;假设在你的%PATH%中只有一个java.exe

尝试以下命令:

where java.exe

如果在%PATH%中有多个Java版本,则会返回多个值。(遗憾的是)

主动方法

按以下方式设置您的环境:

将您的PATH环境变量仅指向c:\tools\java\default

将所有jre存储在一个文件夹中,例如

C:\tools\Java\JRE_1.6
C:\tools\Java\JRE_1.7
C:\tools\Java\JRE_1.8

然后打开命令提示符,在C:\tools\Java\内执行

junction default JRE_1.6

这将创建一个连接点(类似于符号链接)。
这样,您始终会在c:\tools\java\default中拥有默认的Java。 如果您需要将默认的Java更改为1.8版本,只需执行
junction -d default
junction default JRE_1.8   

C:\Program Files\Java\jdk1.8.0_31\jre\bin\java.exe C:\Program Files\Java\jdk1.8.0_31\bin\java.exe C:\Program Files(x86)\Java\jre6\bin\java.exe,似乎只有jdk 1.8可用。 - Sung Qee
这是因为您的%PATH%中有多个Java版本。不幸的是,您真正需要的是Linux的Windows等效命令,但据我所知,这种命令并不存在。许多人声称它的等效性,但存在差异。 - snovelli

0
根据您提供的信息,您的默认Java设置为Java 8,并且您运行的程序可能在使用Java 7的某些IDE中运行。 Java-version命令会显示系统中默认设置的Java版本。

我明白了!我的IDE项目SDK是jdk1.7。但是我想知道如果运行需要Jre的软件,哪个java.exe会被执行? - Sung Qee
如果软件配置文件没有指定任何jre,则将运行默认jdk的jre。 - Dipen Adroja
但是我怎么知道哪个jdk是默认的jdk呢? - Sung Qee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接