如何在Windows 7上设置java_home?

439

我进入控制面板中的“系统”中的环境变量,并创建了两个新变量,一个是用户变量,一个是系统变量。它们都被命名为JAVA_HOME,且均指向

C:\Sun\SDK\jdk\bin

但是出现以下错误时仍无法运行Java命令...

BUILD FAILED
C:\Users\Derek\Desktop\eclipse\eclipse\glassfish\setup.xml:161: The following error  occurred while executing this line:
C:\Users\Derek\Desktop\eclipse\eclipse\glassfish\setup.xml:141: The following error occurred while executing this line:
C:\Users\Derek\Desktop\eclipse\eclipse\glassfish\setup.xml:137: Please set java.home to a JDK installation

Total time: 1 second
C:\Users\Derek\Desktop\eclipse\eclipse\glassfish>lib\ant\bin\ant -f setup.xml
Unable to locate tools.jar. Expected to find it in C:\Program Files\Java\jre6\lib\tools.jar
Buildfile: setup.xml

我该如何解决这个问题?


3
你关闭了命令提示符并重新打开了它吗?同时看起来你指向的是JRE而不是JDK。你是否安装了JDK? - anger
我已经确定安装了JDK,并且它位于C:\Sun\SDK\jdk\bin,我已经将java_home设置为该路径。 - Derek
仍然似乎在寻找C:\Program Files\Java\jre6\lib\ c。您能否在命令提示符中执行echo %JAVA_HOME%并查看其报告内容? - anger
在我的命令提示符中,当我运行echo %JAVA_HOME%时,它返回: C:\Users\Derek\Desktop\eclipse\eclipse\glassfish>echo %JAVA_HOME% C:\Sun\SDK\jdk\bin - Derek
3
解决方案是:省略 /bin 目录。 - IceFire
显示剩余2条评论
18个回答

6
我们需要区分这两个环境变量,它们有时会被混淆。其中一个是JAVA_HOME变量,另一个是Path变量。任何引用JAVA_HOME变量的进程都在寻找JDK而不是JRE的搜索路径。使用JAVA_HOME变量并非为了Java编译器本身,编译器知道自己的位置。该变量旨在帮助其他软件更轻松地定位编译器。通常,IDE软件使用此变量从Java源代码编译和构建应用程序。相比之下,Windows CMD解释器和许多第一方和第三方软件引用的是Path变量,而不是JAVA_HOME变量。 用例1:从CMD编译 例如,如果您没有使用任何IDE软件,只想能够独立于当前工作目录从CMD编译,则需要正确设置Path变量。在这种情况下,您甚至不需要JAVA_HOME变量。因为CMD使用的是Path而不是JAVA_HOME来定位Java编译器。 用例2:从IDE编译 但是,如果您正在使用某些IDE软件,则首先必须查看文档。它可能要求设置JAVA_HOME,但也可能使用另一个变量名来实现相同的目的。多年来,事实上的标准一直是JAVA_HOME,但这可能并非总是如此。 用例3:从IDE和CMD编译 如果除了IDE软件外,您还希望能够独立于当前工作目录从CMD编译,则除了JAVA_HOME变量外,还需要将JDK搜索路径附加到Path变量中。
JAVA_HOME与Path
如果您的问题与Java编译有关,则应检查JAVA_HOME变量和Path变量(如适用)。如果您的问题与运行Java应用程序有关,则应检查Path变量。
Path变量在所有操作系统上通用。由于它由系统定义,并且是用于定位JRE的默认变量,在运行Java应用程序时几乎没有任何问题。特别是在Windows上,软件安装程序通常会为您设置所有内容。但是,如果您手动安装,则最安全的做法可能是完全跳过JAVA_HOME变量,仅使用Path变量来处理JDK和JRE。任何最近版本的IDE软件都应该能够识别并使用它。
符号链接
符号链接可能提供通过借用现有环境变量之一来引用JDK搜索路径的另一种方法。

我不确定之前的Oracle/Sun JDK/JRE版本是否有相同情况,但至少jdk1.8.0_74安装程序会将搜索路径C:\ProgramData\Oracle\Java\javapath添加到Path环境变量中,并将其放在字符串值的开头。此目录中包含指向JRE目录中的java.exe,javaw.exe和javaws.exe的符号链接。

因此,至少对于Java 8 JDK以及可能的Java 8 JRE独立版,无需进行任何环境变量配置即可使用JRE,只要使用安装程序进行设置即可。然而,在Windows安装中可能会存在不同情况。请注意,Oracle JRE随JDK捆绑提供。

如果您发现您的Java JDK配置正在使用错误版本的编译器,或者它似乎是通过魔法工作的,而没有明确定义(不需要施法),则您可能在环境变量中有一个符号链接。因此,您可能需要检查符号链接。


5

打开我的电脑(此电脑)->右键单击->选择属性->高级系统设置->环境变量->在系统变量中点击"新建"按钮,在变量名称中写入JAVA_HOME,并将路径C:\Program Files\Java\jdk1.8.0_131(jdk所在位置)写入变量值中->点击确定。

设置JAVA_HOME后,请关闭并重新打开命令提示符。有时在设置JAVA_HOME之前打开的cmd中不会反映出更改。

您也可以通过终端本身设置JAVA_HOME: SET JAVA_HOME="C:\Program Files (x86)\Java\jdk1.8.0_131"


4
在Eclipse中: 窗口->首选项->Java->已安装的JRE 使用搜索功能确保您最新的Java安装已列出;然后确保它是被选中的。这应该是JDK而不是JRE。

这些指示不设置JAVA_HOME,它与eclipse无关。 - Jules

4

在将Java目录添加到PATH变量时,您可能希望将其放在开头。我曾经遇到过这样的问题,将Java目录放在PATH的末尾不起作用。经过检查,我发现在我的Windows\System32目录中有java.exe文件,看起来第一个同名文件会获胜,当PATH中存在多个同名文件时...


如果您使用安装程序安装Java,它会将系统文件夹中的java.exejavaw.exe的副本替换为JRE / JDK中的副本,因此应该仍然可以正常工作。如果您手动安装它(只需解压归档文件),那么确实需要注意运行哪个副本。 - Synetech
这些指令不会设置JAVA_HOME,它是一个与PATH完全分离的变量,某些程序需要它。 - Jules

3

以管理员身份运行Eclipse

这解决了我的问题。我仍在探究背后的逻辑。


1
我不能说我完全理解这个问题,但也许Eclipse在这里只是给出了错误的错误信息。当您以非管理员身份运行它时,它无法删除.jar文件或其他一些东西,然后错误地报告找不到javac。无论如何,这个解决方案对我也起作用了。 - Jess
如果您像我一样在Windows Server 2012 R2上运行Eclipse,以管理员身份运行Eclipse对我很有效。还要记得将java_home设置为程序文件夹而不是程序(86)文件夹。希望这篇文章能帮助到某些人。 - ombiro

2

如果您在安装JDK后没有重启计算机,请重新启动计算机。

如果您想创建一个便携式Java并在使用Java之前设置路径,只需按照我下面解释的步骤制作批处理文件。

如果您希望在计算机启动时运行此批处理文件,请将批处理文件快捷方式放入启动文件夹中。在Windows 7中,启动文件夹位于“C:\ Users \ user \ AppData \ Roaming \ Microsoft \ Windows \ Start Menu \ Programs \ Startup”。

制作如下批处理文件:

set Java_Home=C:\Program Files\Java\jdk1.8.0_11
set PATH=%PATH%;C:\Program Files\Java\jdk1.8.0_11\bin

注意: java_homepath 是变量。你可以随意定义任何变量。 例如:set amir=good_boy,然后你可以通过%amir%来查看amir变量的值,或者通过%java_home%来查看java_home变量的值。

0
经过数小时的尝试,我终于找到了解决方案。只需要安装32位JDK即可解决问题。

1
如果这是你想要的,那就很好,但有些人不喜欢真正安装Java,而是手动设置“便携式”环境。在这种情况下,你需要知道需要设置哪些环境变量。 - Synetech

0

你可能需要查看Windows/System32文件夹中的以下文件: - java.exe - javaw.exe - javaws.exe

因为路径变量包括这些文件,你可能会头疼地想弄清楚为什么java -version或javac -version一直指向旧的JAVA_HOME:重命名这些文件,去掉下划线后面的扩展名。然后,你只需要创建JAVA_HOME变量,将其添加到路径变量中(例如,%JAVA_HOME%),并附加"\bin"粒子。这样,你只需要更改指向不同JRE或JDK的JAVA_HOME变量,并通过设置JAVA_HOME来安装多个Java。

这也意味着最好手动安装Java,而不是使用安装程序,这样你就可以随心所欲地玩耍。


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