11

作为一名在 *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 的目录"

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

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 相关的目录和二进制文件的位置......但是,我仍然不清楚这包括什么,而且我提出的这个定义是否足够精确,有用。

4

5 回答 5

14

没有“真正”的定义JAVA_HOME。Java 运行时环境不使用此变量,并且没有作为 Java 平台的一部分的规范。

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

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

如果您将其指向 JRE,某些应用程序也可以工作,但如果它需要像 之类的开发工具javac,它将失败。

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

JAVA_HOME=/usr/local/jdk1.6.0_29 ant
于 2011-11-17T19:43:41.627 回答
2

我会把它定义为这样的路径:

`JAVA_HOME\bin\java`

将运行您的程序的可执行文件在哪里。

要查找所有SDK JRE files and jars.

于 2011-11-17T19:36:53.650 回答
2

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

对于像 maven 这样的开发工具,他们主要关心 jdk 目录。他们应该称它为“JDK 之家”。不幸的是,许多人也称它为“java home”,因此造成了混乱。

我们可以通过不使用“java home”来打破这种混乱;相反,为了清楚起见,请说“jre home”或“jdk home”。

于 2011-11-17T19:48:52.923 回答
1

我不知道它在不同系统上设置的内容,但JAVA_HOME应该设置为 java 安装的根目录。因此,如果您将其安装到

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

JAVA_HOME应该设置为那个。

类似于JDK_HOME如果您以书面形式看到的。

于 2011-11-17T19:34:28.217 回答
0

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

于 2011-11-17T19:35:55.487 回答