迈向JAVA_HOME的“真正”定义

时间:2011-11-17 19:31:04

标签: java java-home

作为在* NIX系统(OS X,Ubuntu,...)之间切换的Java开发人员,尽管我总能“启动”我的JDK并且正在运行,但似乎在许多软件包中没有明确的JAVA_HOME定义这需要设置JAVA_HOME:

例如

  • MAVEN:“JAVA_HOME,指的是您的JDK目录”
  • HADOOP:“JAVA_HOME,指定Java 1.5.x安装的路径”
  • SUN:“JAVA_HOME是包含JRE的目录”

因此我对这个问题有2个问题(欢迎任何见解,但具体来说,我有这两个问题):

1)mac os X java安装是否将目标从“JavaVM.frameworks”目录复制到usr / bin?

2)JAVA_HOME的“定义”是什么?显然,我们不能将JAVA_HOME简单地定义为“安装java的地方”,因为这个定义是模糊的,因为java既可以存在于HOME位置(即/ System / Library / Fraemworks / .....),也可以或者,它也可以直接在/ usr / bin目录下?

我的想法

我认为JAVA_HOME实际上不仅仅是指二进制“java”程序。 JAVA_HOME可能是指一组java相关目录和二进制文件的位置......但是,我仍然不清楚这包含了什么,而且我所提议的这个定义是否足够精确到有用。

5 个答案:

答案 0 :(得分:14)

JAVA_HOME没有“真实”的定义。 Java Runtime Environment不使用此变量,并且没有规范作为Java平台的一部分。

它只是一些在Java平台上运行的应用程序使用的约定。由于没有标准,每个应用程序可以自由地制定关于此变量应该引用的目录的规则;您应该阅读应用程序的文档以了解它所需要的内容。

也就是说,如果您将它设置为JDK安装的顶级目录(不是JDK中的JRE,而是JDK本身),我发现使用此变量的每个应用程序都将起作用。该目录应包含分别包含java可执行文件和运行时库的“bin”和“lib”子目录。

如果您将某个应用程序指向JRE,某些应用程序也会起作用,但如果它需要javac等开发工具,则会失败。

通常,我在运行工具时在命令行上指定JAVA_HOME而不是需要它,因为我使用多个版本的Java,如下所示:

JAVA_HOME=/usr/local/jdk1.6.0_29 ant

答案 1 :(得分:2)

我会像路径一样定义它:

`JAVA_HOME\bin\java`

将运行程序的可执行文件是。

查找所有SDK JRE files and jars的源根目录。

答案 2 :(得分:2)

Sun的约定将java home称为jre根目录。这应该是更权威的定义。

对于像maven这样的开发工具,他们最关心的是jdk目录。他们应该把它叫做JDK home"。不幸的是,有很多人称它为“家庭"因此也是混乱。

我们可以通过不使用" java home&#34 ;;来打破混乱。相反,说" jre home"或者" jdk home"为清楚起见。

答案 3 :(得分:1)

我不知道它在不同系统上的设置,但JAVA_HOME应该设置为java安装的根目录。所以如果你把它安装到

C:\Program Files\Java\jdk1.6.0_25\

JAVA_HOME应该设置为。

如果您以书面形式看到,则与JDK_HOME类似。

答案 4 :(得分:0)

JAVA_HOME应指向您要使用的Java安装的安装目录。