为什么我可以在不设置 JAVA_HOME 的情况下使用 javac & java?
Why can I use javac & java without having JAVA_HOME set?
我的 Java 版本是:
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
我没有在 ~/.bash_profile
中设置 JAVA_HOME
,但我可以同时使用 javac
和 java
!
我的 .bash_profile
看起来像这样:
export EDITOR="vim"
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
export MAVEN_HOME="$HOME/opt/maven"
export PATH="$PATH:$MAVEN_HOME/bin"
如果我想安装 JDK 的其他版本,例如 11、14、15...,我该如何使用它?我需要设置JAVA_HOME
吗?
如果我同时安装了多个版本的JDK,我该如何根据需要在不同的时间使用它们?我在网上看到的是配置Java_home,完全不知道怎么弄,因为我担心我安装了其他几个版本的JDK后,他们不会'没用。
我使用 MacOS Big Sur。
JAVA_HOME
被广泛误解。
Java 本身(即 java
、javac
和相关的可执行文件)实际上并不关心 JAVA_HOME
.
当它们被执行时,它们知道要使用哪个 JDK(与它们关联的那个)。唯一相关的是您的 shell(或其他工具) 首先找到 可执行文件,为此 PATH
is used。请注意,PATH
是一个通用变量,如今基本上所有广泛使用的通用 OS 都使用它来查找可执行文件。 不是 Java 特定的东西。
换句话说:当直接从 shell 启动 java
时,只有 PATH
是相关的。
那么为什么 JAVA_HOME
出现得如此频繁?
一些 第三方工具(例如Gradle、Maven、Tomcat 和其他各种工具)将使用JAVA_HOME
来查找适当JDK/JRE执行。如果没有设置 JAVA_HOME
,大多数会返回到 PATH
上的任何内容。
所以如果你使用这样的工具并且你想指定一个特定的Java版本那么你可以设置JAVA_HOME
作为附加提示。
将 JAVA_HOME
设置为指向您首选的 Java 运行时可能是个好主意,但在很多情况下 不需要 。
一种常用的模式是定义一个 JAVA_HOME
以指向您的首选 JDK,然后使用它来设置您的 PATH
。这样两者就会对齐,如果preferred JDK改变了,只需要改变一点:
export JAVA_HOME="/some/path/pointing/to/a/jdk"
export PATH="$JAVA_HOME/bin:$PATH"
您可以使用 Jenv 维护不同版本的 JDK 并动态设置 JAVA_HOME
。
您还可以为不同的文件夹设置特定的 Java 版本,方法是使用名为 .java-version
的文件并提及 java 版本。
我对 sdkman 有很好的体验。您可以轻松安装不同的 JDK 并在它们之间切换。所有必需的环境变量将由 sdkman 设置!
我的 Java 版本是:
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
我没有在 ~/.bash_profile
中设置 JAVA_HOME
,但我可以同时使用 javac
和 java
!
我的 .bash_profile
看起来像这样:
export EDITOR="vim"
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
export MAVEN_HOME="$HOME/opt/maven"
export PATH="$PATH:$MAVEN_HOME/bin"
如果我想安装 JDK 的其他版本,例如 11、14、15...,我该如何使用它?我需要设置JAVA_HOME
吗?
如果我同时安装了多个版本的JDK,我该如何根据需要在不同的时间使用它们?我在网上看到的是配置Java_home,完全不知道怎么弄,因为我担心我安装了其他几个版本的JDK后,他们不会'没用。
我使用 MacOS Big Sur。
JAVA_HOME
被广泛误解。
Java 本身(即 java
、javac
和相关的可执行文件)实际上并不关心 JAVA_HOME
.
当它们被执行时,它们知道要使用哪个 JDK(与它们关联的那个)。唯一相关的是您的 shell(或其他工具) 首先找到 可执行文件,为此 PATH
is used。请注意,PATH
是一个通用变量,如今基本上所有广泛使用的通用 OS 都使用它来查找可执行文件。 不是 Java 特定的东西。
换句话说:当直接从 shell 启动 java
时,只有 PATH
是相关的。
那么为什么 JAVA_HOME
出现得如此频繁?
一些 第三方工具(例如Gradle、Maven、Tomcat 和其他各种工具)将使用JAVA_HOME
来查找适当JDK/JRE执行。如果没有设置 JAVA_HOME
,大多数会返回到 PATH
上的任何内容。
所以如果你使用这样的工具并且你想指定一个特定的Java版本那么你可以设置JAVA_HOME
作为附加提示。
将 JAVA_HOME
设置为指向您首选的 Java 运行时可能是个好主意,但在很多情况下 不需要 。
一种常用的模式是定义一个 JAVA_HOME
以指向您的首选 JDK,然后使用它来设置您的 PATH
。这样两者就会对齐,如果preferred JDK改变了,只需要改变一点:
export JAVA_HOME="/some/path/pointing/to/a/jdk"
export PATH="$JAVA_HOME/bin:$PATH"
您可以使用 Jenv 维护不同版本的 JDK 并动态设置 JAVA_HOME
。
您还可以为不同的文件夹设置特定的 Java 版本,方法是使用名为 .java-version
的文件并提及 java 版本。
我对 sdkman 有很好的体验。您可以轻松安装不同的 JDK 并在它们之间切换。所有必需的环境变量将由 sdkman 设置!