作为在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相关目录和二进制文件的位置…但是,我还不太清楚这是什么,而且我提出的这个定义还不够精确到足够有用.
解决方法
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