JAVA_HOME环境变量和“java -version”的输出有什么区别

时间:2014-08-19 05:02:40

标签: java environment-variables java-home

实际上JAVA_HOME环境变量是什么?我有点怀疑。通过设置它做了什么?我还有另一个问题,如果我们在操作系统中有两个或更多JDK,我们可以设置一个版本的路径来设置$ JAVA_HOME变量,另一个版本作为运行java的机器中的“java -version”显示我认为在ubuntu中,java --version命令给出了JRE配置(运行java)版本的java,JAVA_HOME变量定义了用于编译java程序的版本。我对么?这两个输出所引用的jdks之间究竟有什么区别 -

    1. echo $JAVA_HOME 
    2. java -version

4 个答案:

答案 0 :(得分:6)

让我们从两个命令开始。

  echo $JAVA_HOME 

这将输出JAVA_HOME环境变量的值。按照惯例,此环境变量(通常在shell" rc"文件中)设置为JRE或JDK安装的基本目录。但是,Oracle或OpenJDK核心Java工具都不依赖于此。为了第三方工具的利益,您可以设置JAVA_HOME,告诉他们系统中可能有多少JRE或JDK安装使用。

因此,运行echo $JAVA_HOME通常 a JRE或JDK提供目录。但它可能没有设置......或指向缺少目录。

  java -version

这会运行java命令并告诉它输出自己的版本信息。与前一个不同,如果你的shell可以找到(真实的)java命令,它输出的信息是确定的。

但是java命令来自哪个JRE / JDK呢?

这是由shell决定的,以及它(通常)如何找到命令。对于所有主流Unix / Linux / BSD shell,这由PATH环境变量控制。 PATH变量定义命令搜索路径;即shell查找命令的目录列表。

因此,如果PATH/usr/bin:/bin:/usr/local/bin:/home/joeuser/bin:/usr/java/jre-x.y.z/bin,那么shell将依次在每个目录中查找java 。它找到的第一个java命令将是执行的命令。您可以通过运行此命令找出它是哪一个。

  which java

但这不是它的结束,因为如果你在典型的Linux系统上使用OpenJDK Java安装,java中的/usr/bin命令实际上是符号链接链中的第一个由alternatives命令管理。实际的可执行文件位于链的另一端。

(替代系统是一种为命令或命令集实现可切换系统范围默认值的方法。请阅读手册条目以获取更多详细信息。但请注意Oracle Java安装程序(或RPM) )对于Linux,请不要使用Linux替代系统......我的一个bugbears!)

最后,通常会在shell中看到类似的东西" rc"文件:

  export JAVA_HOME=/path/to/jre              # (or jdk)
  export PATH=/bin:$JAVA_HOME/bin:/usr/bin:...

这没有什么神奇之处。在设置环境变量之前,shell将扩展$JAVA_HOME。实际PATH值将为:

  /bin:/path/to/jre/bin:/usr/bin:...

总结如下:

  • echo $JAVA_HOME告诉您默认情况下典型的第三方工具将尝试使用的JRE或JDK。

  • java -version告诉您JRE或JDK java命令的来源。

  • 他们可能不同。

答案 1 :(得分:2)

JAVA_HOME是一个环境变量,它包含安装Java的目录(如果安装了几个Java版本 - 这将指向默认值)

java -version是一个命令,显示安装了哪个版本的Java(同样,在安装了几个版本的情况下默认使用的版本)

添加:感谢Luiggi的评论:如果安装java的文件夹不在PATH(另一个环境变量)中 - 运行java -version或任何其他java命令都将失败!

答案 2 :(得分:0)

它与jdk和JRE无关。 java -version它由/ usr / bin / java中的java使用。在某些应用程序中使用了$ JDK_HOME。两个jdks都是一样的。或者我们可以定义不同的jdk。

答案 3 :(得分:0)

echo $JAVA_HOME

将打印名为JAVA_HOME的环境变量的值。如果没有设置,它将打印一条空信息。通常,您将JAVA_HOME设置为PC中安装的最新JDK的路径。

java -version

将打印路径中设置的java可执行文件(Java虚拟机)的版本(如果已配置)。否则,它将在命令行上抛出异常。