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

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 

我会像路径一样定义它:

 `JAVA_HOME\bin\java` 

将运行程序的可执行文件的位置。

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

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

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

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

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

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

JAVA_HOME应该设置为。

JDK_HOME类似,如果您在书面看到这一点。

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