迈向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安装的安装目录。