实际上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
答案 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虚拟机)的版本(如果已配置)。否则,它将在命令行上抛出异常。