核心概念
在 Linux 中,Java 环境变量主要涉及以下几个:

-
JAVA_HOME:- 作用: 指向你的 Java 安装目录的根路径,许多 Java 应用程序(如 Tomcat、Jetty)和构建工具(如 Maven、Gradle)都需要这个变量来找到 JDK。
- 值:
/usr/lib/jvm/java-11-openjdk-amd64或/usr/local/java/jdk-11.0.12。
-
PATH:- 作用: 操作系统查找可执行文件的路径列表,当你在终端输入
java或javac命令时,系统会按PATH中定义的顺序去寻找这些命令。 - 配置: 我们需要将 Java 的
bin目录($JAVA_HOME/bin)添加到PATH变量的最前面,以确保系统优先使用我们指定的 Java 版本。
- 作用: 操作系统查找可执行文件的路径列表,当你在终端输入
第一步:检查并安装 Java
在配置之前,请先确认你的系统是否已经安装了 Java,以及安装的是 JDK(Java Development Kit,包含编译器 javac)还是 JRE(Java Runtime Environment,仅运行环境)。
检查是否已安装 Java
打开终端,输入以下命令:

java -version
-
如果已安装,你会看到类似下面的输出,显示 Java 版本信息:
openjdk version "11.0.12" 2025-07-20 OpenJDK Runtime Environment (build 11.0.12+7-Ubuntu-0ubuntu1.20.04.1) OpenJDK 64-Bit Server VM (build 11.0.12+7-Ubuntu-0ubuntu1.20.04.1, mixed mode, sharing) -
如果未安装,你会看到
command not found的错误。
检查是否安装了 JDK
Java 开发需要 javac(编译器)和 jar(打包工具),请检查:
javac -version
- 如果输出版本号,说明 JDK 已安装,你可以直接跳到第二步。
command not found,说明你只安装了 JRE,需要安装完整的 JDK。
安装 JDK(如果需要)
以 Ubuntu/Debian 系统为例,使用 apt 安装 OpenJDK 11:
# 更新软件包列表 sudo apt update # 安装 OpenJDK 11 sudo apt install openjdk-11-jdk
以 CentOS/RHEL/Fedora 系统为例,使用 yum 或 dnf:
# 对于 CentOS/RHEL 7/8 sudo yum install java-11-openjdk-devel # 对于 Fedora 或较新版本的 CentOS/RHEL sudo dnf install java-11-openjdk-devel
安装完成后,再次运行 java -version 和 javac -version 确认安装成功。
第二步:找到 Java 的安装路径
你需要知道 JDK 的确切安装路径,才能正确设置 JAVA_HOME。
使用 update-java-alternatives (推荐,用于 Debain/Ubuntu 系统)
这个工具用于管理系统中的多个 Java 版本。
# 列出所有已安装的 Java 版本 sudo update-java-alternatives --list
输出可能如下:
java-1.11.0-openjdk-amd64 1111 /usr/lib/jvm/java-1.11.0-openjdk-amd64
java-1.8.0-openjdk-amd64 1081 /usr/lib/jvm/java-1.8.0-openjdk-amd64
选择你想要使用的版本,java-1.11.0-openjdk-amd64,它的路径就是 /usr/lib/jvm/java-1.11.0-openjdk-amd64。
使用 alternatives (用于 CentOS/RHEL/Fedora 系统)
# 列出所有已安装的 Java 版本 sudo alternatives --config java
系统会列出可选项,并提示你选择,记下你选择的版本对应的路径。
手动查找
如果以上方法不适用,或者你想手动确认,可以使用 which 和 readlink 命令。
# 找到 java 命令的路径 which java # 输出可能是: /usr/bin/java # 找到 /usr/bin/java 的真实链接目标 readlink -f /usr/bin/java # 输出可能是: /usr/lib/jvm/java-11-openjdk-amd64/bin/java # JAVA_HOME 就是去掉最后 /bin/java 的部分 # 即: /usr/lib/jvm/java-11-openjdk-amd64
第三步:设置环境变量
我们将配置两种环境变量:
- 临时变量:仅对当前终端会话有效,关闭终端后失效,适合快速测试。
- 永久变量:对所有用户或特定用户永久有效,系统重启后仍然有效,这是推荐的做法。
临时设置(仅当前终端会话)
直接在终端中运行以下命令,将 <your-java-path> 替换为你上一步找到的实际路径。
export JAVA_HOME=<your-java-path> export PATH=$JAVA_HOME/bin:$PATH # 验证设置是否成功 echo $JAVA_HOME echo $PATH
在当前终端窗口中,你可以直接使用 java 和 javac 命令,但关闭此窗口后设置即失效。
永久设置(推荐)
永久设置需要修改系统的配置文件,根据你希望生效的范围,选择不同的文件。
方案 A:仅对当前用户生效(推荐)
修改用户主目录下的 .bashrc 文件(如果你使用的是 Bash Shell,这是最常见的情况)。
-
打开
.bashrc文件:nano ~/.bashrc
(你也可以使用
vim ~/.bashrc或gedit ~/.bashrc) -
在文件末尾添加以下内容(再次确认并替换
<your-java-path>):# Java Environment Variables export JAVA_HOME=<your-java-path> export PATH=$JAVA_HOME/bin:$PATH
- 重要提示: 将
<your-java-path>替换为你在第二步中找到的路径,/usr/lib/jvm/java-11-openjdk-amd64。
- 重要提示: 将
-
保存并关闭文件(在
nano中按Ctrl+X,Y,Enter)。 -
让配置立即生效,无需重启终端或电脑:
source ~/.bashrc
方案 B:对所有用户生效
需要 root 权限,修改 /etc/environment 文件。
-
使用
sudo和文本编辑器打开文件:sudo nano /etc/environment
-
在文件中添加或修改以下内容(格式与
.bashrc略有不同,每行一个赋值语句):JAVA_HOME="<your-java-path>" PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
- 注意:这里的
PATH是系统完整的PATH变量。最佳实践是不要直接覆盖它,而是将$JAVA_HOME/bin添加到现有PATH的前面,但/etc/environment的格式不支持简单的$JAVA_HOME/bin扩展,一个更安全的方法是只设置JAVA_HOME,然后在PATH文件中处理PATH变量。
更安全的做法(推荐):
- 只设置
JAVA_HOME:JAVA_HOME="<your-java-path>"
- 然后单独修改
/etc/profile.d/java.sh(如果不存在就创建):sudo nano /etc/profile.d/java.sh
在文件中添加:
export PATH=$JAVA_HOME/bin:$PATH
这样更清晰,也符合模块化配置的原则。
- 注意:这里的
-
保存文件后,重启终端或运行
source /etc/environment使其生效。
第四步:验证配置
无论你采用哪种方式设置,最后都需要验证一下。
-
检查
JAVA_HOME:echo $JAVA_HOME
应该输出你设置的 Java 路径。
-
检查
PATH:echo $PATH
应该能看到你的
$JAVA_HOME/bin出现在路径列表的最前面。 -
检查 Java 命令:
java -version javac -version
应该显示你安装的 Java 版本,并且命令能正常执行。
常见问题与解决方案
问题 1:java -version 正常,但 javac -version 报错 command not found
原因: 你安装的是 JRE 而不是 JDK。javac 编译器只在 JDK 中提供。
解决: 卸载当前的 Java,然后重新安装 JDK,在 Ubuntu 上:
sudo apt purge openjdk-11-jre sudo apt install openjdk-11-jdk
问题 2:设置了环境变量后,echo $JAVA_HOME 没有输出
原因:
- 你没有执行
source命令来让配置文件立即生效。 - 你修改错了配置文件(修改了
.zshrc但你用的是 Bash)。 - 文件中有语法错误(多余的空格或引号不匹配)。 解决:
- 确保
source了正确的文件。 - 检查你使用的 Shell 类型(
echo $SHELL),并修改对应的配置文件(如.bashrc,.zshrc)。 - 仔细检查配置文件中的语法。
问题 3:系统中有多个 Java 版本,如何切换?
原因: JAVA_HOME 和 PATH 可能指向了旧版本。
解决:
-
使用
update-java-alternatives(Ubuntu/Debian) 或alternatives(CentOS/RHEL) 来设置系统默认的 Java 版本。# Ubuntu/Debian sudo update-java-alternatives --set java-1.11.0-openjdk-amd64 # CentOS/RHEL sudo alternatives --config java
-
重新设置你的环境变量,确保
JAVA_HOME指向新的版本,source配置文件。
问题 4:使用 sudo 后,Java 命令找不到或版本不对
原因: sudo 可能会重置环境变量,或者 root 用户的环境变量配置与当前用户不同。
解决:
- 检查
root的环境变量:sudo su - root echo $JAVA_HOME exit
- 为
root用户也配置环境变量,或者使用sudo -E来保留当前用户的环境变量:sudo -E java -version
希望这份详细的指南能帮助你成功完成 Java 环境变量的配置!
