核心概念
在开始之前,我们先理解两个最重要的环境变量:

-
JAVA_HOME:- 作用: 指向你的 Java Development Kit (JDK) 安装根目录的路径。
- 为什么需要: 许多 Java 应用程序(如 Tomcat、Jetty、Maven、Gradle 等)和构建工具需要通过这个变量来找到 JDK 的位置,它提供了一个标准化的方式来定位 JDK,而不是依赖于系统
PATH中的java命令。 - 值:
/usr/lib/jvm/java-11-openjdk-amd64或/usr/lib/jvm/jdk-17。
-
PATH:- 作用: 操作系统在查找可执行文件时要搜索的目录列表。
- 为什么需要: 当你在终端输入
java,javac,javadoc等命令时,系统需要知道去哪里找到这些可执行文件,通过将 JDK 的bin目录添加到PATH中,你就可以在任何地方直接运行这些命令。 - 值:
$JAVA_HOME/bin会被添加到PATH的前面。
第一步:检查当前 Java 安装情况
在配置之前,先确认你的系统上已经安装了 Java,并查看其版本和安装路径。
-
检查 Java 是否已安装:
(图片来源网络,侵删)java -version
如果已安装,你会看到类似下面的输出:
openjdk version "11.0.16" 2025-07-19 OpenJDK Runtime Environment (build 11.0.16+8-post-Ubuntu-0ubuntu122.04) OpenJDK 64-Bit Server VM (build 11.0.16+8-post-Ubuntu-0ubuntu122.04, mixed mode, sharing) -
检查
javac(Java 编译器) 是否可用:javac -version
如果输出正常,说明 JDK(包含编译器)已经安装,如果提示
command not found,可能你只安装了 JRE (Java Runtime Environment),需要安装完整的 JDK。 -
查找 Java 的安装路径: 这是最关键的一步,因为我们需要知道
JAVA_HOME应该指向哪里。# 使用 update-java-alternatives 命令(推荐,适用于通过 apt 安装的 OpenJDK) update-java-alternatives -l
输出会类似这样,显示了所有已安装的 Java 版本及其路径:
java-11-openjdk-amd64 1111 /usr/lib/jvm/java-11-openjdk-amd64 java-17-openjdk-amd64 1171 /usr/lib/jvm/java-17-openjdk-amd64这里的
/usr/lib/jvm/java-11-openjdk-amd64就是我们要找的路径。如果上述命令无效,也可以尝试:
# 查找 java 可执行文件的真实路径 which java # 输出可能是 /usr/bin/java # 追溯到符号链接的原始位置 ls -lr /usr/bin/java # 输出可能是 /etc/alternatives/java # 再追溯一次 ls -lr /etc/alternatives/java # 最终会指向类似 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 的路径 # 那么你的 JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64
第二步:安装 JDK (如果未安装)
如果你的系统没有 JDK,可以通过 apt 安装,以安装 OpenJDK 17 为例:
# 更新软件包列表 sudo apt update # 安装 OpenJDK 17 JDK (包含运行时环境和编译器) sudo apt install openjdk-17-jdk # 验证安装 java -version javac -version
第三步:配置环境变量
Ubuntu 中配置环境变量有几种方法,推荐使用第一种,因为它对所有用户生效且更可控。
为所有用户配置 (推荐)
这种方法通过创建一个独立的配置文件来实现,不会影响系统默认的 profile 文件。
-
创建配置文件:
# 使用你喜欢的编辑器,如 nano 或 vim sudo nano /etc/profile.d/java.sh
-
添加环境变量: 在打开的文件中,输入以下内容。请务必将
YOUR_JAVA_VERSION替换为你在第一步中查找到的实际路径。#!/bin/bash # 设置 JAVA_HOME export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 # 将 $JAVA_HOME/bin 添加到 PATH 的最前面 # 使用 $JAVA_HOME 可以避免硬编码路径 export PATH=$JAVA_HOME/bin:$PATH
注意:
export关键字使得变量对当前 shell 的子进程也可见。- 将
$JAVA_HOME/bin放在$PATH的最前面,可以确保系统优先使用我们指定的 JDK 版本,而不是系统中可能存在的其他版本。
-
保存并退出:
- 在
nano中,按Ctrl + X,然后按Y,最后按Enter。
- 在
-
使配置生效:
-
立即生效: 你可以注销并重新登录,或者运行以下命令来重新加载配置文件。
source /etc/profile.d/java.sh
-
验证配置:
# 检查 JAVA_HOME 是否设置正确 echo $JAVA_HOME # 应该输出你设置的路径,如 /usr/lib/jvm/java-17-openjdk-amd64 # 检查 PATH 是否更新 echo $PATH # 应该能看到 $JAVA_HOME/bin 在路径列表的最前面 # 测试 java 和 javac 命令 java -version javac -version
现在输出的版本应该与你设置的
JAVA_HOME中的版本一致。
-
仅对当前用户配置
如果你只想为当前登录的用户配置 Java 环境,可以修改 ~/.bashrc 或 ~/.profile 文件。
-
编辑
~/.bashrc文件:nano ~/.bashrc
-
在文件末尾添加以下内容:
# Java Environment Variables export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH
-
保存并退出,然后运行
source ~/.bashrc使其生效。
第四步:切换 Java 版本 (高级)
如果你的系统上安装了多个 Java 版本(Java 8 和 Java 17),你可能需要在不同项目之间切换。
-
查看所有已安装的 Java 版本:
update-java-alternatives -l
-
切换默认 Java 版本: 假设你想切换到 Java 11:
sudo update-java-alternatives --set java-11-openjdk-amd64
这会自动更新
/etc/alternatives/下的符号链接,并通常会重新设置JAVA_HOME和PATH。 -
验证切换:
java -version # 现在应该显示 Java 11 的版本
常见问题排查 (FAQ)
Q1: 我设置了 JAVA_HOME,但为什么某些程序(如 Maven)还是找不到它?
A1: 可能的原因:
- 没有
export: 确保在脚本中使用了export JAVA_HOME=...,否则变量只对当前脚本有效。 - 脚本未执行: 如果你修改了
~/.bashrc,需要重新打开终端或运行source ~/.bashrc。 - 路径错误: 再次检查
JAVA_HOME的路径是否完全正确,特别是符号链接指向的最终路径。 - 程序自身问题: 某些程序可能有自己的配置文件来指定 JDK 路径,而不是依赖环境变量。
Q2: 我用 sudo apt 安装了 Java,但找不到 JAVA_HOME。
A2: 这很正常。apt 安装后不会自动设置 JAVA_HOME 环境变量,这正是本指南要解决的问题,你需要手动完成第三步的配置。
Q3: 配置后,echo $JAVA_HOME 没有输出。
A3:
- 确认你执行了
source命令或重新登录了。 - 确认你编辑的文件是正确的(
/etc/profile.d/java.sh而不是/etc/profile)。 - 检查文件中是否有语法错误(例如拼写错误、缺少分号等)。
希望这份详细的指南能帮助你在 Ubuntu 上成功配置 Java 环境变量!
