Java 8未使用自定义配置的JAVA_HOME

前言

我将JDK安装到了 C:\Program Files\Java 目录下,并且配置了系统变量 JAVA_HOME=C:\Program Files\Java\jdk1.8.0_212 和环境变量 PATH=%JAVA_HOME%\bin 但在实际运行过程中,我的JAVA_HOME并没有生效。

问题与分析

从前言中,我们知道了我电脑上的配置情况 JAVA_HOME=C:\Program Files\Java\jdk1.8.0_212,但当我在 CMD 中编译运行下面的程序时,结果却让我很疑惑:

public class Test{
	public static void main(String[] args){
		// 这行代码将打印出 系统变量JAVA_HOME 的值
		System.out.println(System.getProperty("java.home"));
	}
}

我期待的结果是: C:\Program Files\Java\jdk1.8.0_212
但实际结果确是:
实际的JAVA_HOME结果.png
两者是不一致的。
我就索性删除了系统变量JAVA_HOME,但发现该段代码依然能打印出 C:\Program Files\Java\jre1.8.0_212 ,这就让我非常困惑。后来想到我的程序是在 CMD 中运行的,所以Windows会根据 环境变量Path 中指定的路径来寻找java指令,所以我仔细浏览环境变量列表,发现
环境变量.pnh
环境变量列表的第一行配置的路径地址中有 Java 字样,我切换到该目录下,看到了
javapath.png
而我每次基于 JAVA_HOME 在环境变量新添加 java指令执行路径 时,都将其添加到了环境变量列表末尾,而 Windows 是按照环境变量地址中的路径地址的先后顺序来寻找在 cmd 中执行的指令,所以我执行的 java指令 实际上是位于 C:\Program Files (x86)\Common Files\Oracle\Java\javapath 下的 java指令。
那为什么我没有配置 JAVA_HOME 依然能通过 System.getProperty(“java.home”) 得到一个结果呢?我在 StackOverflow 上的这个问题 Which JRE does C:\ProgramData\Oracle\Java\javapath\java.exe use? 的一个回答中找到了答案
stackoverflow上的一个回答.png
我将信将疑地打开自己电脑上的注册表,确实发现了
注册表中Java Runtime-Environment项的值.png
注册表中配置的 JavaHome 的值 C:\Program Files\Java\jre1.8.0_212 确实就是我们那段程序的运行结果。
所以,我们可以合理地猜测,通过运行 C:\Program Files (x86)\Common Files\Oracle\Java\javapathjava 指令到注册表中获取了 JavaHome值 从而输出了我们看到的结果。

解决

删除环境变量中的 C:\Program Files (x86)\Common Files\Oracle\Java\javapath,然后 按正常步骤添加 系统变量JAVA_HOME 以及 环境变量中添加 %JAVA_HOME%\bin 即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章