三个关键环境变量
在 Linux 中配置 Java 环境,主要涉及以下三个环境变量:

JAVA_HOMEPATHCLASSPATH(在现代开发中已不常用,但了解其历史和原理很重要)
JAVA_HOME
JAVA_HOME 是一个指向 Java 安装目录的路径变量。
- 作用:它告诉系统和各种 Java 相关的工具(如 Tomcat、Maven、Gradle 等)你的 JDK 安装在哪里,这是一种最佳实践,因为它只需要修改这一个地方,所有依赖 JDK 的工具就能自动找到正确的路径。
- 值:你的 JDK 的根目录,如果你将 JDK 安装在
/usr/lib/jvm/java-11-openjdk-amd64,JAVA_HOME就应该设置为这个路径。
PATH
PATH 是一个可执行文件搜索路径变量。
- 作用:当你在一个终端中输入一个命令(如
java,javac)时,系统会按照PATH变量中列出的目录顺序去查找这个可执行文件。 - 配置:我们需要将 JDK 的
bin目录添加到PATH变量的前面,这样,当你输入java命令时,系统会优先使用JAVA_HOME/bin/java,而不是系统中可能存在的其他旧版本 Java。
CLASSPATH
CLASSPATH 是一个类文件搜索路径变量。
- 作用:它告诉 Java 虚拟机 在哪里寻找
.class文件(编译后的字节码)和需要加载的 JAR 包。 - 历史与现代用法:
- 早期 Java (JDK 1.5 之前):
CLASSPATH是必需的,必须手动配置才能运行 Java 程序。 - 现代 Java (JDK 1.5 及以后):
CLASSPATH已经不是必需的了,Java 虚拟机默认会:- 查找当前目录 ()。
- 查找 JAR 文件中的
META-INF/MANIFEST.MF文件指定的Class-Path。 - 查找被
java -jar命令指定的 JAR 文件。
- 在绝大多数情况下,你不需要手动设置
CLASSPATH,如果强行设置,可能会覆盖默认行为,导致程序无法运行,我们在这里讲解它主要是为了让你理解其原理。
- 早期 Java (JDK 1.5 之前):
操作步骤
配置环境变量有两种主要方式:临时配置和永久配置。

临时配置 (仅对当前终端会话有效)
这种方式适合临时测试,关闭终端后配置就失效了。
-
假设你的 JDK 安装路径是
/usr/lib/jdk-11.0.12,检查这个路径是否存在:ls /usr/lib/jdk-11.0.12 # 你应该能看到 bin, conf, include, jre, lib 等目录
-
设置变量
# 设置 JAVA_HOME export JAVA_HOME=/usr/lib/jdk-11.0.12 # 将 JDK 的 bin 目录添加到 PATH export PATH=$JAVA_HOME/bin:$PATH # (可选) 清空或设置 CLASSPATH (不推荐) # export CLASSPATH=.
-
验证配置
(图片来源网络,侵删)# 验证 JAVA_HOME echo $JAVA_HOME # 应该输出: /usr/lib/jdk-11.0.12 # 验证 PATH echo $PATH # 应该能看到 /usr/lib/jdk-11.0.12/bin 在路径的最前面 # 验证 Java 命令 java -version javac -version # 应该显示你刚刚配置的 JDK 11 的版本信息
注意:这种方式只对当前打开的终端有效,如果你打开一个新的终端,这些变量将不会被设置。
永久配置 (对所有用户或特定用户永久有效)
这是推荐的方式,配置后会永久生效。
A. 对当前用户永久生效 (推荐)
这种方式只影响你自己的用户账户,不会影响系统中的其他用户。
-
编辑配置文件 打开你用户主目录下的
.bashrc文件(如果你使用的是 Zsh,则编辑.zshrc)。nano ~/.bashrc # 或者使用 vim # vim ~/.bashrc
-
在文件末尾添加以下内容
# Java Environment Configuration export JAVA_HOME=/usr/lib/jdk-11.0.12 export PATH=$JAVA_HOME/bin:$PATH # export CLASSPATH=.
-
保存并退出
- 在
nano中,按Ctrl + X,然后按Y,最后按Enter。 - 在
vim中,按Esc,然后输入wq并按Enter。
- 在
-
让配置立即生效 你可以关闭当前终端再重新打开一个,或者使用
source命令让配置立即在当前终端生效:source ~/.bashrc
-
验证配置 和临时配置一样,使用
echo $JAVA_HOME,java -version等命令进行验证。
B. 对所有用户永久生效 (需要管理员权限)
这种方式会影响系统中的所有用户,除非用户自己覆盖了这些变量。请谨慎操作。
-
编辑配置文件 通常编辑
/etc/profile或/etc/environment文件。/etc/profile更常见。sudo nano /etc/profile # 或者 # sudo vim /etc/profile
-
在文件末尾添加以下内容
# Java Environment Configuration for All Users export JAVA_HOME=/usr/lib/jdk-11.0.12 export PATH=$JAVA_HOME/bin:$PATH # export CLASSPATH=.
-
保存并退出 同上,使用
nano或vim的保存方式。 -
让配置立即生效 所有用户的下次登录会自动生效,如果想立即对所有当前登录的用户生效,可以运行:
source /etc/profile
如何查找我的 JDK 安装在哪儿?
如果你不确定 JDK 的安装路径,可以使用以下命令查找:
# 使用 which 命令查找 java 命令的路径 which java # 可能输出 /usr/bin/java # 使用 readlink 命令找到这个符号链接的真正指向 readlink -f $(which java) # 可能输出 /usr/lib/jvm/java-11-openjdk-amd64/bin/java # 从上面的路径中,我们可以推断出 JDK 的根目录是 # /usr/lib/jvm/java-11-openjdk-amd64 # 这就是你的 JAVA_HOME 应该设置的值 # 更通用的方法是查找包含 java 可执行文件的目录 # dpkg -S 命令可以查找某个文件属于哪个软件包 dpkg -S $(which java) # 可能输出: openjdk-11-jdk: /usr/bin/java # 然后可以列出该软件包的文件,找到根目录 dpkg -L openjdk-11-jdk | grep bin/java # 可以帮助你定位到安装路径
常见问题排查
-
java: command not found- 原因:
PATH没有配置正确,或者JAVA_HOME指向的路径下没有bin/java。 - 解决:检查
PATH变量是否包含了$JAVA_HOME/bin,并确保JAVA_HOME的路径是正确的。
- 原因:
-
版本冲突
- 现象:系统中有多个版本的 Java (如 OpenJDK 8 和 11),但运行
java -version显示的不是你想要的版本。 - 原因:
PATH中存在一个旧版本的 Javabin目录,并且排在了你配置的新版本前面。 - 解决:检查
echo $PATH的输出,确保你的$JAVA_HOME/bin在最前面,或者使用update-alternatives命令来管理系统的默认 Java 版本。
- 现象:系统中有多个版本的 Java (如 OpenJDK 8 和 11),但运行
-
Error: Could not find or load main class ...- 原因:这是
CLASSPATH问题,可能是CLASSPATH被错误地设置,或者程序依赖的 JAR 包没有被正确加载。 - 解决:
- 首选:不要设置
CLASSPATH,让 JVM 使用默认行为。 - 如果必须使用
CLASSPATH,确保它包含了编译后的.class文件所在的目录和所有依赖的 JAR 包,export CLASSPATH=/path/to/your/classes:/path/to/dependency.jar。
- 首选:不要设置
- 原因:这是
| 变量名 | 作用 | 配置值 | 是否必须 |
|---|---|---|---|
JAVA_HOME |
指向 JDK 安装根目录的路径 | JDK 的根目录,如 /usr/lib/jdk-11 |
强烈推荐 |
PATH |
包含 JAVA_HOME/bin,以便系统找到 java, javac 等命令 |
...:$JAVA_HOME/bin |
必须 |
CLASSPATH |
指定 JVM 查找 .class 文件和 JAR 包的路径 |
通常不设置,使用默认值 | 通常不需要 |
最佳实践:为当前用户永久配置 JAVA_HOME 和 PATH,通过编辑 ~/.bashrc 或 ~/.zshrc 文件实现,这是最安全、最灵活的方式。
