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

JAVA_HOME: 指向你的 JDK 安装目录的路径,很多 Java 应用服务器(如 Tomcat、Jetty)和工具(如 Maven、Gradle)都需要通过这个变量来找到 JDK。PATH: 系统的命令搜索路径,当你在终端输入一个命令时,系统会按PATH中列出的目录顺序去寻找该命令的可执行文件,我们需要将 JDK 的bin目录添加到PATH中,这样你就可以在任何地方直接使用java,javac,jar等命令。CLASSPATH(可选): 用于指定 Java 虚拟机(JVM)在查找类(.class 文件)和库(.jar 文件)时需要搜索的路径。在现代 Java 开发中,这个变量已经不常被手动设置了,因为类加载机制和构建工具(如 Maven)已经很好地处理了路径问题,除非有特殊需求,否则建议不要手动配置它。
为当前用户设置(推荐)
这种方法只影响你当前登录的用户,不会影响其他用户,是最安全、最常用的方式。
第 1 步:确认已安装的 Java 版本和路径
你需要检查系统是否已经安装了 Java,并找到它的安装路径。
-
检查 Java 是否已安装:
java -version
如果已安装,会显示 Java 版本信息。
(图片来源网络,侵删)openjdk version "17.0.8" 2025-07-18 OpenJDK Runtime Environment (build 17.0.8+7-Ubuntu-0ubuntu121.04) OpenJDK 64-Bit Server VM (build 17.0.8+7-Ubuntu-0ubuntu121.04, mixed mode, sharing) -
查找 JDK 的安装路径: 使用
update-alternatives命令(适用于使用apt安装的系统,如 Ubuntu/Debian):sudo update-alternatives --config java
这会列出所有已安装的 Java 版本,并告诉你它们的路径,记下你想要使用的版本的路径,
/usr/lib/jvm/java-17-openjdk-amd64。或者,直接使用
which和readlink命令查找:# 找到 java 命令的位置 which java # 例如输出: /usr/bin/java # 找到该命令的真实链接路径 readlink -f $(which java) # 例如输出: /usr/lib/jvm/java-17-openjdk-amd64/bin/java # 提取 JDK 的根目录 echo /usr/lib/jvm/java-17-openjdk-amd64 # 这就是你的 JAVA_HOME 路径
第 2 步:设置环境变量
我们将通过修改 shell 配置文件来实现,对于大多数现代 Linux 发行版(如 Ubuntu, CentOS 7+),推荐使用 ~/.bashrc 或 ~/.zshrc(如果你使用 Zsh)。

-
打开配置文件: 使用你喜欢的文本编辑器,
nano或vim。nano ~/.bashrc
-
在文件末尾添加以下内容: 重要: 将下面的
/path/to/your/jdk替换为你自己查找到的实际 JDK 路径。# 设置 Java 环境 export JAVA_HOME=/path/to/your/jdk export PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME=...:定义JAVA_HOME变量。export PATH=$JAVA_HOME/bin:$PATH:将$JAVA_HOME/bin目录添加到PATH的最前面,确保系统优先使用你指定的 JDK 版本。$PATH是原有的路径,用冒号 分隔。
-
保存并关闭文件。
- 在
nano中,按Ctrl + X,然后按Y,最后按Enter。
- 在
第 3 步:使配置生效
修改完配置文件后,你需要让当前的终端会话加载新的配置。
- 方法一(推荐):重新打开一个终端窗口。 这样新的 shell 会自动加载最新的
~/.bashrc文件。 - 在当前终端执行以下命令:
source ~/.bashrc
第 4 步:验证配置
让我们验证环境变量是否设置成功。
-
检查
JAVA_HOME:echo $JAVA_HOME
应该输出你设置的 JDK 路径。
-
检查
PATH:echo $PATH
应该能看到你的 JDK
bin目录在路径的最前面。 -
再次检查 Java 版本:
java -version
确认使用的是你期望的版本。
-
检查
javac编译器:javac -version
这能确保
PATH配置正确,因为javac在bin目录下。
为所有用户设置(系统级)
如果你希望系统上的每一个用户都能使用这个 Java 环境,你需要修改系统级的配置文件。这需要 sudo 权限。
-
打开系统级配置文件: 通常使用
/etc/profile或/etc/environment。/etc/profile:对所有交互式登录 shell 用户生效。/etc/environment:对所有用户(包括非交互式)生效,语法稍有不同(不能使用export)。
这里我们以
/etc/profile为例:sudo nano /etc/profile
-
在文件末尾添加内容:和方法一完全一样。
# Set Java environment for all users export JAVA_HOME=/path/to/your/jdk export PATH=$JAVA_HOME/bin:$PATH
-
保存并关闭文件。
-
使配置生效: 所有用户都需要重新登录才能生效,或者,你可以执行
source /etc/profile,但这只会影响当前用户。
使用 update-alternatives(管理多版本 Java)
如果你的系统上安装了多个 Java 版本(OpenJDK 8, 11, 17),update-alternatives 是管理它们切换的最佳工具,它本质上就是自动帮你设置 JAVA_HOME 和 PATH。
-
注册可用的 Java 版本:
# 假设你的 JDK 安装在 /usr/lib/jvm/java-17-openjdk-amd64 sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1 sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-17-openjdk-amd64/bin/javac 1 # 对其他命令如 jar, javadoc 等也执行类似操作
-
选择默认版本:
sudo update-alternatives --config java
系统会列出所有已注册的 Java 版本,你可以输入编号来选择默认使用的版本。
-
(可选)配置
JAVA_HOME:update-alternatives管理的是命令,但JAVA_HOME仍需手动设置,你可以通过以下命令自动获取当前默认 Java 的路径并设置JAVA_HOME(在~/.bashrc中):echo "export JAVA_HOME=$(readlink -f /usr/bin/java | sed 's:/bin/java::')" >> ~/.bashrc source ~/.bashrc
常见问题与解决方法 (FAQ)
Q1: 为什么设置了 JAVA_HOME 后,java -version 仍然报错或指向旧版本?
- 原因1: 你没有执行
source ~/.bashrc或重启终端。 - 原因2: 你的
PATH中有其他路径优先级更高,检查echo $PATH,看看是否有其他 JDK 的bin目录排在前面。 - 原因3: 你可能同时设置了全局和用户环境变量,产生了冲突,建议只使用一种方式。
- 原因4: 你可能设置了
CLASSPATH并且其中包含了错误的路径。
Q2: JAVA_HOME 和 PATH 的区别是什么?
JAVA_HOME是一个引用路径,告诉程序“JDK 安装在哪里”。PATH是一个命令搜索路径,告诉 Shell “去哪里找可执行文件”。- 关系:
PATH需要包含$JAVA_HOME/bin,这样 Shell 才能找到java等命令。
Q3: 我应该把 export 语句放在哪个文件里?
~/.bashrc或~/.zshrc:为当前用户设置,推荐,每次打开新终端都会加载。~/.bash_profile或~/.profile:为当前用户设置,但只在登录时加载一次。/etc/profile:为所有用户设置,需要sudo。/etc/environment:为所有用户设置,语法更严格(不能使用export和 变量)。
对于大多数开发者,~/.bashrc 是最佳选择。
Q4: 如何删除 Java 环境变量?
- 打开你当初编辑的配置文件(如
~/.bashrc)。 - 删除或注释掉(在行首加 )那两行
export语句。 - 保存文件,然后执行
source ~/.bashrc或重启终端。
希望这份详细的指南能帮助你成功地在 Linux 系统上配置 Java 环境!
