什么是 JAVA_HOME?
JAVA_HOME 是一个环境变量,其值指向你的 JDK 安装目录的根路径,如果你的 JDK 安装在 /usr/lib/jvm/java-11-openjdk-amd64,JAVA_HOME 就应该设置为这个路径。

为什么需要它?
- 标准化路径:很多 Java 应用服务器(如 Tomcat、Jetty)和构建工具(如 Maven、Gradle)需要通过
JAVA_HOME来找到java、javac等可执行文件,而不是直接在系统的PATH中查找,这使得配置更清晰、更易于移植。 - 避免版本冲突:如果你的系统上安装了多个版本的 JDK,通过设置
JAVA_HOME,你可以明确指定当前项目或服务应该使用哪个版本的 JDK。 - 工具依赖:像 Eclipse、IntelliJ IDEA 这样的 IDE 也依赖
JAVA_HOME来配置其内置的 JDK 和编译器。
如何找到你的 JDK 安装路径?
在设置 JAVA_HOME 之前,你必须先知道 JDK 安装在哪里,以下是几种常见的方法:
方法1:使用 update-java-alternatives (Debian/Ubuntu 系统)
这些系统通常使用 update-java-alternatives 来管理 Java 版本。
# 查看所有已安装的 Java 版本 sudo update-java-alternatives --list
输出可能类似于:

java-1.8.0-openjdk-amd64 /usr/lib/jvm/java-1.8.0-openjdk-amd64
java-11-openjdk-amd64 /usr/lib/jvm/java-11-openjdk-amd64
java-17-openjdk-amd64 /usr/lib/jvm/java-17-openjdk-amd64
从列表中,你可以选择你想要使用的版本,并记下其路径(/usr/lib/jvm/java-17-openjdk-amd64)。
方法2:使用 ls 和 which 命令
-
首先确认
java命令是否可用:which java
输出可能是
/usr/bin/java。 -
然后使用
ls -l追踪符号链接:
(图片来源网络,侵删)ls -l /usr/bin/java
输出可能类似于:
lrwxrwxrwx 1 root root 25 10月 26 10:30 /usr/bin/java -> /etc/alternatives/java -
继续追踪
etc/alternatives/java:ls -l /etc/alternatives/java
输出会指向真正的 JDK 安装目录:
lrwxrwxrwx 1 root root 43 10月 26 10:31 /etc/alternatives/java -> /usr/lib/jvm/java-17-openjdk-amd64/bin/java你得到了 JDK 的根路径:
/usr/lib/jvm/java-17-openjdk-amd64。
方法3:检查环境变量(临时或当前用户)
JAVA_HOME 可能已经被设置过了,你可以检查一下:
echo $JAVA_HOME
如果已经有输出,那它可能就是你要找的路径,但最好还是用前面的方法验证一下其是否指向正确的 JDK。
如何设置 JAVA_HOME
设置环境变量有几种方式,适用于不同的场景。强烈推荐使用方法1或方法2,因为它们是为系统级 Java 管理设计的。
方法1:使用 update-java-alternatives (推荐,Debian/Ubuntu)
这是管理 Java 版本最规范的方法。
-
选择并设置默认 Java 版本:
# 假设你想使用 java-17-openjdk-amd64 sudo update-java-alternatives --set java-17-openjdk-amd64
这个命令会自动更新所有相关的符号链接(包括
java,javac,jar等)。 -
然后设置
JAVA_HOME: 这个命令不会自动设置JAVA_HOME环境变量,你需要手动设置,通常我们会把它放在/etc/environment文件中,这样对所有用户都有效。# 编辑 /etc/environment 文件 sudo nano /etc/environment
在文件末尾添加或修改以下行:
JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"
注意:这里的值必须是你在
update-java-alternatives --list中看到的完整路径。 -
使配置生效:
# 让当前 shell 会话加载新的环境变量 source /etc/environment
-
验证:
echo $JAVA_HOME java -version # $JAVA_HOME/bin/java -version # 也可以这样直接执行
方法2:使用 /etc/profile.d/ (推荐,适用于所有主流发行版)
这是一个非常通用且推荐的方法,它会为所有登录到系统的用户设置环境变量。
-
创建一个配置脚本:
sudo nano /etc/profile.d/java.sh
-
在文件中添加以下内容:
#!/bin/sh export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH
解释:
export JAVA_HOME=...:设置并导出JAVA_HOME变量。export PATH=$JAVA_HOME/bin:$PATH:将 JDK 的bin目录添加到系统的PATH环境变量中,这样你就可以在任何地方直接使用java,javac等命令。
-
保存文件并赋予执行权限:
sudo chmod +x /etc/profile.d/java.sh
-
使配置生效: 你需要重新登录,或者执行以下命令来让当前会话加载新的配置:
source /etc/profile # 或者 source ~/.bash_profile
-
验证:
echo $JAVA_HOME echo $PATH java -version
方法3:仅对当前用户设置
如果你只想为当前用户设置,可以将环境变量添加到用户主目录下的 shell 配置文件中,~/.bashrc 或 ~/.profile。
-
编辑配置文件:
nano ~/.bashrc
-
在文件末尾添加:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH
-
使配置生效:
source ~/.bashrc
常见问题与排查
echo $JAVA_HOME 为空,但 java -version 可以用
这通常意味着 java 命令在 PATH 中,但 JAVA_HOME 没有被正确设置,某些工具(如 Maven)会因此报错,请按照上述方法正确设置 JAVA_HOME。
设置后不生效
- 确认文件路径:检查你修改的文件是否正确(
/etc/profile.d/java.sh或~/.bashrc)。 - 确认执行
source:修改配置文件后,必须执行source命令或重新打开终端才能让当前会话生效。 - 确认权限:如果你修改的是系统级文件(如
/etc/profile.d/java.sh),确保它有执行权限 (chmod +x)。 - 检查拼写:
JAVA_HOME全部大写,中间是下划线_,不要写成JavaHome或java_home。
如何切换 Java 版本?
如果你使用 update-java-alternatives 管理版本,只需再次运行设置命令即可:
sudo update-java-alternatives --set java-11-openjdk-amd64 source /etc/profile # 重新加载环境变量
如果你手动设置了 JAVA_HOME,则需要手动修改配置文件中的路径并重新加载。
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
update-java-alternatives |
Debian/Ubuntu 系统 | 官方推荐,自动管理所有 Java 命令链接 | 需要手动设置 JAVA_HOME |
/etc/profile.d/ |
所有主流 Linux 发行版 (最推荐) | 系统级生效,对所有用户有效,配置清晰 | 需要手动创建文件和 source |
~/.bashrc / ~/.profile |
仅对当前用户生效 | 不会影响其他用户,适合个人开发 | 新开终端或 source 才生效 |
对于绝大多数 Linux 用户,使用 update-java-alternatives 管理版本,并配合 /etc/profile.d/ 设置 JAVA_HOME 是最稳定、最规范的做法。
