gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 19:54:16 24 4
gpt4 key购买 nike

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

最佳答案

让我们从这两个命令的作用开始。

  echo $JAVA_HOME 

这会输出JAVA_HOME环境变量的值。按照约定,此环境变量设置(通常在 shell“rc”文件中)为 JRE 或 JDK 安装的基目录。然而,Oracle 或 OpenJDK 核心 java 工具都不依赖于此。您设置 JAVA_HOME 是为了第 3 方工具的利益,告诉他们要使用系统上可能安装的许多 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 安装,则 /usr/bin 中的 java 命令是实际上是由alternatives 命令管理的符号链接(symbolic link)链中的第一个。实际的可执行文件位于链的另一端。

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

最后,在 shell“rc”文件中经常会看到类似的内容:

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

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

  /bin:/path/to/jre/bin:/usr/bin:...
<小时/>

总结一下:

  • echo $JAVA_HOME 告诉您典型的第 3 方工具默认会尝试使用的 JRE 或 JDK。

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

  • 它们可能不同。

关于java - JAVA_HOME环境变量和 "java -version"的输出有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25375950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com