杰瑞科技汇

Linux环境变量如何配置Java?

为什么需要环境变量?

环境变量是操作系统用来存储有关运行环境信息的变量,对于 Java 最关键的信息就是:

Linux环境变量如何配置Java?-图1
(图片来源网络,侵删)
  • JDK 安装在哪里? (JAVA_HOME)
  • 在哪里可以找到 Java 的可执行程序(如 java, javac)? (PATH)

当你执行 java -versionjavac 命令时,操作系统就是通过读取这些环境变量来找到并执行相应的程序的。


核心环境变量详解

与 Java 相关的环境变量主要有三个:JAVA_HOME, PATH, 和 CLASSPATH

a. JAVA_HOME

  • 作用:指向 Java Development Kit (JDK) 的安装根目录
  • 为什么重要
    1. 标准化:很多 Java 应用服务器(如 Tomcat, Jetty)和构建工具(如 Maven, Ant)的启动脚本都需要通过 JAVA_HOME 来找到 JDK,而不是直接依赖 PATH 里的 java 命令,这使得在不同环境中切换 JDK 变得非常简单,只需修改 JAVA_HOME 的值即可。
    2. 清晰明确:它明确指出了当前系统正在使用的 JDK 版本和位置,便于管理。
  • 值示例
    • 如果你将 JDK 安装在 /usr/lib/jvm/java-11-openjdk-amd64JAVA_HOME 就应该设置为 /usr/lib/jvm/java-11-openjdk-amd64
    • 如果你使用 SDKMAN! 管理版本,可能是 /home/your_user/.sdkman/candidates/java/current

b. PATH

  • 作用:一个由冒号 () 分隔的目录列表,当你在终端输入一个命令时,操作系统会按顺序搜索这个列表中的每一个目录,寻找与该命令名称匹配的可执行文件。
  • 为什么重要:为了让你可以在任何目录下直接执行 java, javac, jps 等 JDK 工具命令,而不是必须输入它们的完整路径(/usr/lib/jvm/java-11-openjdk-amd64/bin/java)。
  • 如何设置:你需要将 JDK 的 bin 目录添加到 PATH 变量的前面。
    • 假设 JAVA_HOME/usr/lib/jvm/java-11-openjdk-amd64,那么需要添加到 PATH 的就是 $JAVA_HOME/bin
    • 注意:将 $JAVA_HOME/bin 放在 PATH 的最前面,可以确保系统优先使用你指定的 JDK 版本,而不是系统中可能存在的其他旧版本 Java。

c. CLASSPATH

  • 作用:一个由冒号 () 分隔的路径列表,告诉 Java 虚拟机 (JVM) 在哪里查找用户定义的类和库(.jar 或 .class 文件)。
  • 历史与现代用法
    • Java 8 及之前CLASSPATH 非常重要,通常需要手动设置,用于指定第三方库(如 mysql-connector-java.jar)和当前项目的 .class 文件位置。
    • Java 9 及之后:由于引入了模块化系统,javacjava 命令现在会自动在当前目录查找类文件,手动设置 CLASSPATH 已经变得非常少见,对于大多数现代 Java 项目,你不再需要配置它,构建工具(如 Maven, Gradle)和 IDE(如 IntelliJ IDEA, Eclipse)会自动处理类路径。

如何配置环境变量?(以 Ubuntu/Debian 为例)

环境变量的配置方式取决于其作用域(当前终端会话 或 全局用户 或 全局系统)。

仅对当前终端会话生效(临时)

直接在终端使用 export 命令,这种方式在你关闭终端后就会失效,适合临时测试。

Linux环境变量如何配置Java?-图2
(图片来源网络,侵删)
# 1. 假设你的 JDK 安装路径在这里
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
# 2. 将 JDK 的 bin 目录添加到 PATH 的最前面
export PATH=$JAVA_HOME/bin:$PATH
# 3. 验证配置
echo $JAVA_HOME
echo $PATH
# 4. 验证 Java 命令
java -version
javac -version

对当前用户生效(推荐)

这种方式会将环境变量写入用户的主目录下的配置文件(如 .bashrc, .zshrc),每次用户登录时都会自动加载。

  1. 打开配置文件

    nano ~/.bashrc
    • 如果你使用的是 Zsh shell(macOS 默认或通过 Oh My Zsh 安装),则编辑 ~/.zshrc
  2. 在文件末尾添加以下内容

    # Java Environment Variables
    export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
    export PATH=$JAVA_HOME/bin:$PATH

    请务必将 /usr/lib/jvm/java-11-openjdk-amd64 替换为你自己的 JDK 实际安装路径。

    Linux环境变量如何配置Java?-图3
    (图片来源网络,侵删)
  3. 保存并关闭文件(在 nano 中是 Ctrl+XYEnter)。

  4. 让配置立即生效(无需重启终端):

    source ~/.bashrc
    • 对于 Zsh,使用 source ~/.zshrc
  5. 验证配置

    echo $JAVA_HOME
    java -version

对系统所有用户生效(谨慎使用)

这种方式需要管理员权限,修改的是系统级的配置文件(如 /etc/environment/etc/profile)。

  1. 使用 sudo 编辑 /etc/environment 文件

    sudo nano /etc/environment
  2. 在文件中添加 KEY="VALUE" 格式的行

    JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
    PATH="/usr/lib/jvm/java-11-openjdk-amd64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

    注意:在 /etc/environment 中,赋值使用 ,并且值通常用双引号括起来,你需要手动构建完整的 PATH,或者更推荐的方法是只修改 /etc/profile/etc/profile.d/ 下的脚本。

  3. 保存文件后,重启终端或运行 source /etc/environment 使其生效。


如何查找 JDK 的安装路径?

如果你不确定 JDK 安装在哪里,可以使用以下命令:

  1. 使用 update-java-alternatives (Ubuntu/Debian 系统) 这个命令用于管理多个 Java 版本。

    # 列出所有已安装的 Java 版本
    sudo update-java-alternatives --list

    输出可能如下:

    java-1.8.0-openjdk-amd64      1081       /usr/lib/jvm/java-1.8.0-openjdk-amd64
    java-11-openjdk-amd64         1101       /usr/lib/jvm/java-11-openjdk-amd64

    这里的第二列就是“链接名”,第三列就是实际的安装路径,你可以选择其中一个路径作为 JAVA_HOME

  2. 使用 lswhich 命令

    # 查看 java 命令的实际路径
    which java
    # 输出可能是 /usr/bin/java
    # 查看 /usr/bin/java 的符号链接指向哪里
    ls -l /usr/bin/java
    # 输出可能是 /etc/alternatives/java
    # 再查看 /etc/alternatives/java 的指向
    ls -l /etc/alternatives/java
    # 输出最终指向,/usr/lib/jvm/java-11-openjdk-amd64/bin/java
    # JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64
  3. 使用 readlink 命令 这是一个更简洁的组合命令:

    readlink -f $(which java)
    # 直接输出最终路径,/usr/lib/jvm/java-11-openjdk-amd64/bin/java
    # 然后你就可以提取出其父目录作为 JAVA_HOME

常见问题排查

  • 问题java -version 显示的版本不是我配置的版本。

    • 原因PATH 中可能存在一个旧版本的 Java bin 目录在你配置的 $JAVA_HOME/bin 之前
    • 解决:检查 echo $PATH 的输出,确保 $JAVA_HOME/bin 在列表的最前面。
  • 问题javac: command not found

    • 原因:你只配置了 JAVA_HOME,但没有将其 bin 目录添加到 PATH 中;或者你安装的是 JRE 而不是 JDK(JRE 没有 javac 编译器)。
    • 解决:确认安装的是 JDK,并正确配置了 PATH
  • 问题Error: Could not find or load main class ...

    • 原因:这通常是 CLASSPATH 问题或执行方式问题,在现代 Java 开发中,99% 的情况是因为你在错误的目录下运行了命令,或者没有使用构建工具。
    • 解决
      1. 进入包含 main 方法的 .java 文件所在的目录。
      2. 先编译:javac YourClassName.java
      3. 再运行(注意 代表当前目录):java -cp . YourClassName
      4. 如果项目复杂,请使用 Maven 或 Gradle。
环境变量 作用 推荐配置方式 现代重要性
JAVA_HOME 指向 JDK 根目录,供工具和脚本使用 用户级 (.bashrc / .zshrc)
PATH 包含 JAVA_HOME/bin,以便直接执行 Java 命令 用户级 (.bashrc / .zshrc)
CLASSPATH 指定 JVM 查找类和库的路径 通常无需手动配置 (Java 9+)

对于任何 Java 开发者,在 Linux 环境下正确配置 JAVA_HOMEPATH 是一项基础且必备的技能。

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