JAVA_HOME环境变量存在的原因是什么?


92

许多基于Java的应用程序都需要设置JAVA_HOME env变量。这个变量的目的是什么?



2
我发现问题还没有答案。至于执行Java本身,如果路径中包含二进制文件,则不必具有此变量。所有答案都指出了显而易见的一点:“ java的安装位置”。但是为什么:运行Java应用程序意味着什么?

7
尽管有所有这些评论和答案,但我看不出设置此环境变量的实际原因。没有理由 我来自尝试通过wsdl2java进行设置。如果我不使用此工具,则不需要env变量。...似乎只是某些工具使用了此var。但为什么?
Thufir

@Thufir-但是,我没有在任何地方明确看到原因。-JAVA_HOME只是约定。除了每个人都同意使用它以外,它没有任何特殊含义AFAIK-我看到的唯一用途是,它使工具能够区分通常在PATH变量中设置的JRE和JDK。通常,JAVE_HOME设置为JDK。-很明显 没有像PATH那样处理目录的顺序,在PATH中可能有多个位置可以找到Java exe。
罗汉'18

Answers:


22

环境变量是包含诸如驱动器,路径或文件名之类的信息的字符串。

JAVA_HOME环境变量指向Java运行时环境(JRE)安装在您的计算机上的目录。


40
一种更正:JAVA_HOME应该指向一个JDK而不是一个JRE。许多应用都不在乎这些差异,但对于某些应用而言意义重大。
克里斯·纳瓦

4
JDK中也有JRE文件夹。因此,借助JAVA_HOME,应用程序可以定位JDK和JRE。
流氓小伙子

@ChrisNava:似乎将JAVA_HOME指向JRE安装在某些情况下是有效的(我猜大多数非开发案例):stackoverflow.com/questions/17601827/…。所以说“应该”就说太多了。
cic

18

目的是指向Java的安装位置。$JAVA_HOME/bin/java应该执行Java运行时。


4
但这很愚蠢,因为java应该位于路径中,并且二进制文件可以使用相对路径定位自身并打开其他文件。
LtWorf 2014年

3
当java 不在 $ PATH上时,例如在安装了多个SDK时,这很有用。
哈孔2014年

二进制文件的第一个参数是可执行文件本身的全名,java无需在路径中即可找到其自己的目录。
LtWorf 2014年

@Haakon作为尝试建立多个JDK的人,为什么希望Java出现在路径上?Windows如何从java_home中定位Java?我认为该路径或多或少被定义为“操作系统将在其中查找可执行文件的位置列表”。
LastStar007 '19

7

当您运行Java程序时,需要首先启动JVM,通常是通过运行可执行文件来完成的,在Windows上是java.exe。您可以通过多种方式获得该信息,例如仅给出完整路径:

C:\somedir\bin\java.exe

或可能将其放在您的PATH上。

您可以将某些类文件或包含程序类的Jar文件指定为命令行参数。但这还不够,java.exe本身需要各种其他资源,尤其是所有Java库。通过设置环境变量JAVA_HOME,可以指定在何处找到JRE,从而找到所有那些运行时资源。您应确保执行的特定Java与JAVA_HOME的设置匹配。

您可能还需要JAVA_HOME\bin尽早使用,这样,如果java.exe生成自身的副本(例如,编译JSP),它将选择正确的版本。


5

JAVA_HOME环境变量

必须在不同的操作系统上进行设置。查看以下链接。

另请参阅此处以获取更多信息。


1
您正在environment与进行混淆path,这是不同的东西,但是在Windows中使用的方式与在Linux中完全相同。
2013年

1
@val刚刚指出,此后他的回答已得到纠正。
barlop

只是要添加到Windows 10
filip_j 16/08/18

5

据@dirai 这里 JAVA_HOME不使用Java本身,而是由一些第三方工具,例如像Apache Tomcat上。但是,大多数应用程序都可以在未设置此变量的情况下运行,但有些应用程序可能会表现出意外的行为。


3

JAVA_HOME允许您运行多个Java安装中的任何一个。即使/usr/lib/jvm/java-1.8.0/bin/java 您首先在PATH中使用,也可以说JAVA_HOME=/usr/lib/jvm/java-1.5.0并让默认的“ java”用来运行程序,而根据环境设置,它会使用另一个程序。即使程序员没有将其安装在正常的系统位置,这也可以使程序员使用所需的Java,并测试该替代版本或提供与该替代版本的反向兼容性。而且它也不容易被其他已安装程序在PATH中重置,例如Java本身的主要版本更新。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.