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

问题描述 投票:75回答:14

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

之前,此处和其他地方已经提出过这个问题:

How do I set the default Java installation/runtime (Windows)?

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

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

我的猜测是这是一个特定于1.7的问题,Windows 7正在做一些不应该与注册表一起使用的东西。

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

编辑:哎呀。当我写“路径”时,我在上面写了“类路径中的第一个条目”。抱歉。

windows java
14个回答
121
投票

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

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

因此,您需要修改注册表,或者在Windows目录之前将所需的Java版本放在PATH中。


1
投票

在我的情况下,我安装了Java 7和8(都是x64),我想重定向到java 7但是所有东西都设置为使用Java 8.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上测试过。


0
投票

这里有一个额外的因素;除了java安装在你要求它放置它们的地方放置的java可执行文件之外,java安装程序还将一些可执行文件的副本放在你的windows system32目录中,所以你可能会使用每个java可执行文件都是最近安装。


0
投票

如果您使用.BAT文件作为Windows服务,我建议卸载Windows服务并在将%JAVA_HOME%更改为指向正确的Java版本后重新安装它。


0
投票

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

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

0
投票

经过一段时间的努力并研究它之后,我终于设法按照以下步骤解决了这个问题:

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

最后,我使用“java -version”在cmd中检查了java的默认版本并且它有效!


22
投票

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

从路径

它解决了我的问题。


21
投票

我也有这个问题。我正在运行1.6但是想要构建我正在使用1.5的代码。我改变了JAVA_HOMEPATH(用户和系统)无济于事。

答案是1.6的安装程序将java.exejavaw.exejavaws.exe放入我的Windows\System32文件夹(Windows 7)。

我通过将这些文件重命名为java_wrong.exejavaw_wrong.exejavaws_wrong.exe来解决它。只有这样做后才能获得JAVA_HOMEPATH中定义的正确java版本。我因此重新命名了文件,因为它以一种容易逆转的方式删除了它们。

希望这可以帮助!


12
投票

Windows不会忽略任何东西。这是您的设置问题; Windows只使用您提供的内容。它没有JAVA_HOME的特殊知识。

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

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

(对于可能不知道这一点的其他人:检查%PATH%的最简单方法是打开命令提示符并键入echo %PATH%。您也可以通过右键单击“开始”菜单右侧窗格中的Computer并选择Properties来实现此目的。 ,然后是Advanced System Settings,以及tne Environmental Variables按钮。)


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;


2
投票

对于我在'Path'变量中的Case,有一个像'C:\ProgramData\Oracle\Java\javapath;'这样的参数。这个位置有来自java 8的java.exejavaw.exejavaws.exe,它是通过Oracle的jdk.exe新安装的。

我从Path中删除了这个文本,其中我的路径已经有了%JAVA_HOME%\bin

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


2
投票

我安装了Java 7和8,我想重定向到java 7,但我的cmd提示窗口中的java版本显示了Java 8。 最后将Java 7 bin目录路径(C:\ Program Files \ Java \ jdk1.7.0_10 \ bin)添加到PATH变量,但没有解决并显示Java 8.所以我将Java 7路径更改为启动路径值,它工作。 打开一个新的cmd提示窗口并检查我的java版本,现在它显示了Java 7


2
投票

enter image description here假设您已经在JDK 8之后安装了JDK 10,并且在系统环境变量集路径中安装了“C:\ ProgramData \ Oracle \ Java \ javapath”,然后通过此路径进行Java版本控制。它会忽略JAVA_HOME甚至jdk 1.8路径设置在这里删除路径中的“C:\ ProgramData \ Oracle \ Java \ javapath”以获得JAVA_HOME路径的效果


1
投票

将Path环境变量设置为所需的jdk / bin目录

© www.soinside.com 2019 - 2024. All rights reserved.