Windows忽略JAVA_HOME:如何将JDK设置为默认值?


89

如何说服Windows使用JDK而不是JRE?

之前,这里和其他地方都曾问过这个问题:

如何设置默认的Java安装/运行时(Windows)?

问题是Windows忽略了JAVA_HOME它,也忽略了我将JDK bin目录作为路径中的第一项的事实。

当我从命令行运行时java -version,它运行1.7 JRE而不是调用我的JDK 1.6安装。

我的猜测是这是1.7特有的问题,Windows 7正在使用注册表进行某些操作。

有想法该怎么解决这个吗?

编辑:糟糕。我的意思是“路径”时,我在上面写了“ classpath中的第一个条目”。抱歉。

Answers:


131

在Windows上,java可执行文件使用Windows注册表来定位要运行的Java的默认版本。

java.exe使用PATH环境变量找到要运行的副本。除非您采取措施更改此设置,否则默认情况下会在Windows目录中找到一个副本。由于此副本不在Java运行时目录中,因此可以通过查看注册表来查找该副本。

所以,你要么需要修改注册表,或把你想要的Java版本之前,在你的Windows目录PATH


11
OP在这里。请参阅上面的编辑。是的,解决了它。有两个注意事项:首先,似乎Java安装程序确实将java.exe放在Windows \ System32中。这真让我惊讶。其次,当您在“计算机/属性/高级系统设置/环境变量”下修改路径时,您必须修改系统路径,而不是用户路径。系统路径放在首位。
ccleve

2
我还将强调user237815的观点,即Java安装程序似乎实际上将其java.exe放到了Windows \ System32中。这对我来说当然是不直观的。只有从控制台检查了“ java -version”之后,我才获得Windows现在正在使用从我的JDK安装中获取的java.exe而不是某些以前不需要的版本的舒适程度。
John Tobler 2012年

17
在我的情况下,通过重命名Windows / System32文件夹中的java.exe,javaw.exe和javaws.exe也解决了该问题。然后,直到那时,java -version才会显示在JAVA_HOME和PATH中设置的版本
Inversus 2012年

6
你救了我的一天!在Windows中的PATH之前,将与JDK相关的条目移至此即可解决此问题。非常感谢!
the_dark_destructor 2013年

9
我在Windows 10上将变量%JAVA_HOME%\bin放在第一位path并为我工作。
温德尔

30

在Windows 8中,您可能要删除 C:\ProgramData\Oracle\Java\javapath 目录。

从路径

它解决了我的问题。


5
在Windows 10中,其:C:\ Program Files(x86)\ Common Files \ Oracle \ Java \ javapath。这将自动添加到系统路径变量。删除并设置您的自定义路径位置。
Dexter

1
上面的评论在Windows 10的情况下有所帮助
Saba Ahang

23

我也有这个问题。我正在运行1.6,但想构建正在使用1.5的代码。我已经将JAVA_HOMEand PATH(用户和系统)更改为无效。

答案是1.6安装程序下跌java.exejavaw.exe以及javaws.exe为我的Windows\System32文件夹(Windows 7)。

我解决它通过这些文件重命名为java_wrong.exejavaw_wrong.exejavaws_wrong.exe。只有这样做,以后它拿起正确的Java版本中定义JAVA_HOMEPATH。我之所以这样对文件进行了重命名,是因为这样可以轻松地将其删除。

希望这可以帮助!


10
无需重命名,您可以修改PATH变量,将其指定为第一个值%JAVA_HOME%\ bin,这样它将成为它将采用的第一个值
maxivis 2013年

1
@maxivis谢谢。我想问题可能出在PATH元素的排序上,例如Windows \ System32在JAVA_HOME之前。我只是简单地重命名了它们,以便以可逆的方式有效地删除它们。
Inversus

以某种方式在路径中设置JAVA_HOME对我没有任何作用,这个实际上解决了它。
Guilherme Orioli

12

Windows不会忽略任何内容。这是您的设置问题;Windows仅使用您提供的内容。它没有以下方面的特殊知识JAVA_HOME

CLASSPATH与Windows无关。对于Windows,这只是一个环境变量,它会扩展到文件夹位置。

检查您的%PATH%环境变量。这就是使Windows优先找到另一个的原因。路径(如您链接的帖子所述)应指向%JAVA_HOME%\bin;<remainder of path>。同样,您链接到的帖子为您提供了一种使用批处理文件进行设置的方法。

(对于其他可能不知道的人:检查%PATH%的最简单方法是打开命令提示符并键入echo %PATH%。您也可以通过Computer在“开始”菜单的右窗格中右键单击并选择Properties,然后单击,到达该位置Advanced System Settings。和tneEnvironmental Variables按钮。)


@erickson:好的。谢谢-我会改正的。但是,它仍然与Windows无关,这就是我的答案。:)
肯·怀特

可以理解,我只是担心会产生新的误解。Java并不JAVA_HOME比Windows更了解。
erickson

我感谢纠正。我自己不是Java人士(迄今为止经验有限),因此很高兴知道以供将来参考。
肯·怀特

1
JAVA_HOME应该设置为java安装的根目录。该路径应具有%JAVA_HOME%\bin;&lt;remainder of path%gt;,否则您将无法使用“查找” java,javac等工具。当然,Windows只会真正查看PATH变量,但JAVA_HOME有时会查看一些与Java相关的工具。
埃德温·巴克

@Edwin:也修复了丢失的内容\bin。谢谢。
肯·怀特

6

我遇到过同样的问题。我安装了一堆Java版本,由于某种原因,我使用Java 1.7代替Java 1.6,即使我在使用1.6的路径中指定了(C:\ jdk1.6.0_45_32 \ bin)。

我必须移动我想使用的JDK的路径(1.6)作为PATH环境变量中的第一个条目,以确保Windows使用1.6而不是1.7。

因此,例如,之前的PATH环境变量为:

C:\Program Files (x86);...<other entries>;C:\dev\ant181\bin;C:\jdk1.6.0_45_32\bin

在将jdk设置为第一个之后,它起作用了:

C:\jdk1.6.0_45_32\bin;C:\Program Files (x86);...<other entries>;C:\dev\ant181\bin

我猜想Java 1.7的Windows安装程序将它安装到PATH中已经存在的其他目录中,因此首先使用它,而不是使用指定的自定义PATH条目C:\ jdk1.6.0_45_32 \ bin;


谢啦兄弟。移动JAVA_HOME \ bin路径作为Path变量的第一个元素可以挽救我的生命。
奥马尔塔什彻

4

对于'Path'变量中的Case,添加了一个像' C:\ProgramData\Oracle\Java\javapath;'这样的参数。这个位置来自java.exejavaw.exe并且javaws.exe来自jdk.exe从Oracle新安装的Java 8 。

我已从我的Path已有的Path中删除了此文本%JAVA_HOME%\bin

现在,该变量'JAVA_HOME'控制着我想要的Java版本。


4

在此处输入图片说明假设您已经在JDK 8之后安装了JDK 10,并且在系统环境变量中设置了路径,例如“ C:\ ProgramData \ Oracle \ Java \ javapath”,然后通过该路径控制Java版本。即使在此处设置了jdk 1.8路径,它也会忽略JAVA_HOME,因此请删除路径中的“ C:\ ProgramData \ Oracle \ Java \ javapath”以获取JAVA_HOME路径的效果


2

我已经安装了Java 7和8,我想重定向到Java 7,但是cmd提示符窗口中的Java版本显示Java8
添加了Java 7 bin目录路径(C:\ Program Files \ Java \ jdk1.7.0_10 \ bin)到PATH变量的末尾,但没有成功,并显示Java8。因此,我将Java 7路径更改为路径值的开头,它可以正常工作。
打开一个新的cmd提示窗口并检查我的Java版本,现在它显示Java 7



1

就我而言,我安装了Java 7和8(均为x64),我想重定向到Java 7,但是所有内容都设置为使用Java8。Java使用PATH环境变量:

C:\ ProgramData \ Oracle \ Java \ javapath

作为查找其文件夹运行时(是隐藏文件夹)的第一个选项。此路径包含3个无法编辑的符号链接。

在我的电脑中,PATH环境变量如下所示:

C:\ ProgramData \ Oracle \ Java \ javapath; C:\ Windows \ System32; C:\ Program Files \ Java \ jdk1.7.0_21 \ bin;

就我而言,它应如下所示:

C:\ Windows \ System32; C:\ Program Files \ Java \ jdk1.7.0_21 \ bin;

我必须将符号链接剪切并粘贴到其他位置,以便Java找不到它们,以后我可以将其还原。

将JAVA_HOME和JRE_HOME环境变量设置为所需的Java文件夹的运行时(在我的情况下为Java 7)后,该命令 java -version应显示所需的Java运行时。我说没有必要弄乱注册表。

在Win7 x64上测试。


1

此问题可能是由于您的系统中安装了Java的早期版本。首先,请仔细检查您的环境变量,并删除与先前版本的JAVA相关的所有环境变量,并将这些路径替换为

C:\Program Files\Java\<your new jdk version>\bin

0

这里还有一个额外的因素。除了将Java安装放置在Windows上的Java可执行文件之外,Java安装程序还将Windows XP中的某些可执行文件的副本放置在Windows system32目录中,因此您很可能会使用每个Java可执行文件所在的位置最近安装。


0

以防万一,如果您将.BAT文件用作Windows服务,我建议卸载Windows服务,然后将%JAVA_HOME%更改为指向正确的Java版本后再重新安装。


0

经过一段时间解决这个问题并进行研究后,我终于设法按照以下步骤解决了该问题:

1)安装jdk版本12
2)在系统变量中创建新变量
3)将其命名为JAVA_HOME并指定jdk安装路径
4)在路径中添加此变量并将其移至顶部。
5)转到C:\ Program Files(86)\ Common Files \ Oracle \ Java \ javapath,并用pathtojavajdk / bin文件夹中具有相同名称的对应文件替换java.exe和javaw.exe

最后,我使用“ java -version”检查了cmd中Java的默认版本,它可以正常工作!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.