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

C: \ Sun jdk \ SDK \ \ 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

我该如何解决这个问题?


当前回答

对于那些仍然被这个问题难住的人(我尝试了以上所有的建议)——

如果您使用的是64位版本的Windows,并且已经安装了32位JDK,那么除了调整PATH变量外,您可能还需要调整注册表变量。

我绞尽脑汁,已经正确地设置了PATH变量——仍然无济于事——然后在我的注册表中只发现“空的”Java条目,似乎是修复“失败”的Java运行时环境的死胡同。

通过使用进程监视器来监视我试图开始的程序,以嗅出它在Java(运行时环境)的注册表中查找的位置,我得意地发现它在HKEY_LOCAL_MACHINE\SOFTWARE\**Wow6432Node**\JavaSoft\Java运行时环境中查找32位版本的注册表项。

在该键中,您应该找到已安装的不同Java版本(过去和/或现在)的子键。单击最新版本的子密钥(例如,我的子密钥当前为1.7.0_25)。单击该子键后,您将看到右侧列出的注册表字符串值,特别是JavaHome和RuntimeLib。您需要修改这两个值的值,以分别反映当前文件夹和jvm.dll文件。

例如,在我的例子中,值(以前)分别设置在C:\Program Files (x86)\Java\jre7和C:\Program Files (x86)\Java\jre7\bin\client\jvm.dll,这在我的机器上不存在。我必须将这些更新到C:\Program Files (x86)\Java\ jdk1.7.0_25\jre和C:\Program Files (x86)\Java\ jdk1.7.0_25\jre\bin\client\jvm.dll的当前文件夹和文件。

同样,这完全取决于您安装的Java (JDK和/或JRE)版本——32或64位——以及您使用的操作系统类型——32或64位。只需要知道它们反映在注册表中的不同位置(例如用于32位应用程序的Wow6432Node,在我的例子中,32位JDK安装在64位机器上)。

现在我已经更新了这两个注册表值,我的程序运行得完美无缺,不再出现问题或关于缺少Java运行时环境的抱怨(源于注册表)。

其他回答

在对这里的大多数解决方案进行了数小时的研究之后,我只需要安装32位JDK就解决了这个问题。

在将Java目录添加到PATH变量时,您可能希望将其放在PATH变量的开头。我有一个问题,将Java目录放在PATH的末尾将不起作用。经过检查,我在我的Windows\System32目录中找到了java.exe,看起来第一个赢了,当你的PATH中有几个同名的文件时…

您需要将其设置为C:\Sun\SDK\jdk(假设这是jdk的安装位置-这不是默认值)-不要将\bin放在C:\Sun\SDK\jdk\bin中。

如果你的应用程序只在你作为当前用户登录时运行,那么把它放在用户变量中——如果它需要为系统上的所有用户运行,那么把它放在系统变量中。

您可能还需要将%JAVA_HOME%\bin添加到路径中(这也取决于您是仅从用户运行它还是从所有用户运行它,包括系统)

We need to make a distinction between the two environment variables that are discussed here interchangeably. One is the JAVA_HOME variable. The other is the Path variable. Any process that references the JAVA_HOME variable is looking for the search path to the JDK, not the JRE. The use of JAVA_HOME variable is not meant for the Java compiler itself. The compiler is aware of its own location. The variable is meant for other software to more easily locate the compiler. This variable is typically used by IDE software in order to compile and build applications from Java source code. By contrast, the Windows CMD interpreter, and many other first and third party software references the Path variable, not the JAVA_HOME variable.

用例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 vs. Path

如果您的问题与编译Java有关,那么您需要检查JAVA_HOME变量和Path(如果适用)。如果您的问题与运行Java应用程序有关,那么您需要检查Path变量。

Path variable is used universally across all operating systems. Because it is defined by the system, and because it's the default variable that's used for locating the JRE, there is almost never any problem running Java applications. Especially not on Windows where the software installers usually set everything up for you. But if you are installing manually, the safest thing to do is perhaps to skip the JAVA_HOME variable altogether and just use the Path variable for everything, for both JDK and the JRE. Any recent version of an IDE software should be able to pick that up and use it.

符号链接

符号链接可以提供另一种引用JDK搜索路径的方法,即通过装载现有的环境变量之一。

我不确定以前版本的Oracle/Sun JDK/JRE版本,但至少jdk1.8.0_74的安装程序将搜索路径C:\ProgramData\Oracle\Java\javapath附加到path变量,并将其放在字符串值的开头。此目录包含到JRE目录中的java.exe、javaw.exe和javaw.exe的符号链接。

因此,至少对于Java 8 JDK,以及独立的Java 8 JRE,不需要为JRE进行环境变量配置。只要你使用安装包来设置它。不过,Windows安装可能会有不同。注意,Oracle JRE是与JDK捆绑在一起的。

如果您发现您的Java JDK配置使用了错误的编译器版本,或者它看起来像魔术一样工作,而没有显式地定义(没有施咒),那么您的环境变量中可能有一个符号链接。你可能需要检查符号链接。

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

如果你想在使用Java之前制作一个可移植的Java并设置路径,只需制作一个我下面解释的批处理文件。

如果您想在计算机启动时运行此批处理文件,只需将批处理文件快捷方式放在启动文件夹中。在windows 7的启动文件夹是“C:\Users\user\AppData\漫游\Microsoft\ windows \开始菜单\程序\启动”

做一个这样的批处理文件:

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

注意: Java_home和path是变量。你可以随意设置任何变量。 例如,设置amir=good_boy,你可以通过%amir%看到amir,或者通过%java_home%看到java_home