杰瑞科技汇

Linux Java环境变量如何正确配置?

三个关键环境变量

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

Linux Java环境变量如何正确配置?-图1
(图片来源网络,侵删)
  1. JAVA_HOME
  2. PATH
  3. CLASSPATH (在现代开发中已不常用,但了解其历史和原理很重要)

JAVA_HOME

JAVA_HOME 是一个指向 Java 安装目录的路径变量

  • 作用:它告诉系统和各种 Java 相关的工具(如 Tomcat、Maven、Gradle 等)你的 JDK 安装在哪里,这是一种最佳实践,因为它只需要修改这一个地方,所有依赖 JDK 的工具就能自动找到正确的路径。
  • :你的 JDK 的根目录,如果你将 JDK 安装在 /usr/lib/jvm/java-11-openjdk-amd64JAVA_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 虚拟机默认会:
      1. 查找当前目录 ()。
      2. 查找 JAR 文件中的 META-INF/MANIFEST.MF 文件指定的 Class-Path
      3. 查找被 java -jar 命令指定的 JAR 文件。
    • 在绝大多数情况下,你不需要手动设置 CLASSPATH,如果强行设置,可能会覆盖默认行为,导致程序无法运行,我们在这里讲解它主要是为了让你理解其原理。

操作步骤

配置环境变量有两种主要方式:临时配置永久配置

Linux Java环境变量如何正确配置?-图2
(图片来源网络,侵删)

临时配置 (仅对当前终端会话有效)

这种方式适合临时测试,关闭终端后配置就失效了。

  1. 假设你的 JDK 安装路径是 /usr/lib/jdk-11.0.12,检查这个路径是否存在:

    ls /usr/lib/jdk-11.0.12
    # 你应该能看到 bin, conf, include, jre, lib 等目录
  2. 设置变量

    # 设置 JAVA_HOME
    export JAVA_HOME=/usr/lib/jdk-11.0.12
    # 将 JDK 的 bin 目录添加到 PATH
    export PATH=$JAVA_HOME/bin:$PATH
    # (可选) 清空或设置 CLASSPATH (不推荐)
    # export CLASSPATH=.
  3. 验证配置

    Linux Java环境变量如何正确配置?-图3
    (图片来源网络,侵删)
    # 验证 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. 对当前用户永久生效 (推荐)

这种方式只影响你自己的用户账户,不会影响系统中的其他用户。

  1. 编辑配置文件 打开你用户主目录下的 .bashrc 文件(如果你使用的是 Zsh,则编辑 .zshrc)。

    nano ~/.bashrc
    # 或者使用 vim
    # vim ~/.bashrc
  2. 在文件末尾添加以下内容

    # Java Environment Configuration
    export JAVA_HOME=/usr/lib/jdk-11.0.12
    export PATH=$JAVA_HOME/bin:$PATH
    # export CLASSPATH=.
  3. 保存并退出

    • nano 中,按 Ctrl + X,然后按 Y,最后按 Enter
    • vim 中,按 Esc,然后输入 wq 并按 Enter
  4. 让配置立即生效 你可以关闭当前终端再重新打开一个,或者使用 source 命令让配置立即在当前终端生效:

    source ~/.bashrc
  5. 验证配置 和临时配置一样,使用 echo $JAVA_HOME, java -version 等命令进行验证。

B. 对所有用户永久生效 (需要管理员权限)

这种方式会影响系统中的所有用户,除非用户自己覆盖了这些变量。请谨慎操作

  1. 编辑配置文件 通常编辑 /etc/profile/etc/environment 文件。/etc/profile 更常见。

    sudo nano /etc/profile
    # 或者
    # sudo vim /etc/profile
  2. 在文件末尾添加以下内容

    # Java Environment Configuration for All Users
    export JAVA_HOME=/usr/lib/jdk-11.0.12
    export PATH=$JAVA_HOME/bin:$PATH
    # export CLASSPATH=.
  3. 保存并退出 同上,使用 nanovim 的保存方式。

  4. 让配置立即生效 所有用户的下次登录会自动生效,如果想立即对所有当前登录的用户生效,可以运行:

    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
# 可以帮助你定位到安装路径

常见问题排查

  1. java: command not found

    • 原因PATH 没有配置正确,或者 JAVA_HOME 指向的路径下没有 bin/java
    • 解决:检查 PATH 变量是否包含了 $JAVA_HOME/bin,并确保 JAVA_HOME 的路径是正确的。
  2. 版本冲突

    • 现象:系统中有多个版本的 Java (如 OpenJDK 8 和 11),但运行 java -version 显示的不是你想要的版本。
    • 原因PATH 中存在一个旧版本的 Java bin 目录,并且排在了你配置的新版本前面。
    • 解决:检查 echo $PATH 的输出,确保你的 $JAVA_HOME/bin 在最前面,或者使用 update-alternatives 命令来管理系统的默认 Java 版本。
  3. 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_HOMEPATH,通过编辑 ~/.bashrc~/.zshrc 文件实现,这是最安全、最灵活的方式。

分享:
扫描分享到社交APP
上一篇
下一篇