杰瑞科技汇

Linux下Java Home如何正确配置?

什么是 JAVA_HOME

JAVA_HOME 是一个环境变量,其值指向你的 JDK 安装目录的根路径,如果你的 JDK 安装在 /usr/lib/jvm/java-11-openjdk-amd64JAVA_HOME 就应该设置为这个路径。

Linux下Java Home如何正确配置?-图1
(图片来源网络,侵删)

为什么需要它?

  1. 标准化路径:很多 Java 应用服务器(如 Tomcat、Jetty)和构建工具(如 Maven、Gradle)需要通过 JAVA_HOME 来找到 javajavac 等可执行文件,而不是直接在系统的 PATH 中查找,这使得配置更清晰、更易于移植。
  2. 避免版本冲突:如果你的系统上安装了多个版本的 JDK,通过设置 JAVA_HOME,你可以明确指定当前项目或服务应该使用哪个版本的 JDK。
  3. 工具依赖:像 Eclipse、IntelliJ IDEA 这样的 IDE 也依赖 JAVA_HOME 来配置其内置的 JDK 和编译器。

如何找到你的 JDK 安装路径?

在设置 JAVA_HOME 之前,你必须先知道 JDK 安装在哪里,以下是几种常见的方法:

方法1:使用 update-java-alternatives (Debian/Ubuntu 系统)

这些系统通常使用 update-java-alternatives 来管理 Java 版本。

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

输出可能类似于:

Linux下Java Home如何正确配置?-图2
(图片来源网络,侵删)
java-1.8.0-openjdk-amd64      /usr/lib/jvm/java-1.8.0-openjdk-amd64
java-11-openjdk-amd64         /usr/lib/jvm/java-11-openjdk-amd64
java-17-openjdk-amd64         /usr/lib/jvm/java-17-openjdk-amd64

从列表中,你可以选择你想要使用的版本,并记下其路径(/usr/lib/jvm/java-17-openjdk-amd64)。

方法2:使用 lswhich 命令

  1. 首先确认 java 命令是否可用

    which java

    输出可能是 /usr/bin/java

  2. 然后使用 ls -l 追踪符号链接

    Linux下Java Home如何正确配置?-图3
    (图片来源网络,侵删)
    ls -l /usr/bin/java

    输出可能类似于:

    lrwxrwxrwx 1 root root 25 10月 26 10:30 /usr/bin/java -> /etc/alternatives/java
  3. 继续追踪 etc/alternatives/java

    ls -l /etc/alternatives/java

    输出会指向真正的 JDK 安装目录:

    lrwxrwxrwx 1 root root 43 10月 26 10:31 /etc/alternatives/java -> /usr/lib/jvm/java-17-openjdk-amd64/bin/java

    你得到了 JDK 的根路径:/usr/lib/jvm/java-17-openjdk-amd64

方法3:检查环境变量(临时或当前用户)

JAVA_HOME 可能已经被设置过了,你可以检查一下:

echo $JAVA_HOME

如果已经有输出,那它可能就是你要找的路径,但最好还是用前面的方法验证一下其是否指向正确的 JDK。


如何设置 JAVA_HOME

设置环境变量有几种方式,适用于不同的场景。强烈推荐使用方法1或方法2,因为它们是为系统级 Java 管理设计的。

方法1:使用 update-java-alternatives (推荐,Debian/Ubuntu)

这是管理 Java 版本最规范的方法。

  1. 选择并设置默认 Java 版本

    # 假设你想使用 java-17-openjdk-amd64
    sudo update-java-alternatives --set java-17-openjdk-amd64

    这个命令会自动更新所有相关的符号链接(包括 java, javac, jar 等)。

  2. 然后设置 JAVA_HOME: 这个命令不会自动设置 JAVA_HOME 环境变量,你需要手动设置,通常我们会把它放在 /etc/environment 文件中,这样对所有用户都有效。

    # 编辑 /etc/environment 文件
    sudo nano /etc/environment

    在文件末尾添加或修改以下行:

    JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"

    注意:这里的值必须是你在 update-java-alternatives --list 中看到的完整路径。

  3. 使配置生效

    # 让当前 shell 会话加载新的环境变量
    source /etc/environment
  4. 验证

    echo $JAVA_HOME
    java -version
    # $JAVA_HOME/bin/java -version  # 也可以这样直接执行

方法2:使用 /etc/profile.d/ (推荐,适用于所有主流发行版)

这是一个非常通用且推荐的方法,它会为所有登录到系统的用户设置环境变量。

  1. 创建一个配置脚本

    sudo nano /etc/profile.d/java.sh
  2. 在文件中添加以下内容

    #!/bin/sh
    export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
    export PATH=$JAVA_HOME/bin:$PATH

    解释

    • export JAVA_HOME=...:设置并导出 JAVA_HOME 变量。
    • export PATH=$JAVA_HOME/bin:$PATH:将 JDK 的 bin 目录添加到系统的 PATH 环境变量中,这样你就可以在任何地方直接使用 java, javac 等命令。
  3. 保存文件并赋予执行权限

    sudo chmod +x /etc/profile.d/java.sh
  4. 使配置生效: 你需要重新登录,或者执行以下命令来让当前会话加载新的配置:

    source /etc/profile
    # 或者
    source ~/.bash_profile
  5. 验证

    echo $JAVA_HOME
    echo $PATH
    java -version

方法3:仅对当前用户设置

如果你只想为当前用户设置,可以将环境变量添加到用户主目录下的 shell 配置文件中,~/.bashrc~/.profile

  1. 编辑配置文件

    nano ~/.bashrc
  2. 在文件末尾添加

    export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
    export PATH=$JAVA_HOME/bin:$PATH
  3. 使配置生效

    source ~/.bashrc

常见问题与排查

echo $JAVA_HOME 为空,但 java -version 可以用

这通常意味着 java 命令在 PATH 中,但 JAVA_HOME 没有被正确设置,某些工具(如 Maven)会因此报错,请按照上述方法正确设置 JAVA_HOME

设置后不生效

  • 确认文件路径:检查你修改的文件是否正确(/etc/profile.d/java.sh~/.bashrc)。
  • 确认执行 source:修改配置文件后,必须执行 source 命令或重新打开终端才能让当前会话生效。
  • 确认权限:如果你修改的是系统级文件(如 /etc/profile.d/java.sh),确保它有执行权限 (chmod +x)。
  • 检查拼写JAVA_HOME 全部大写,中间是下划线 _,不要写成 JavaHomejava_home

如何切换 Java 版本?

如果你使用 update-java-alternatives 管理版本,只需再次运行设置命令即可:

sudo update-java-alternatives --set java-11-openjdk-amd64
source /etc/profile  # 重新加载环境变量

如果你手动设置了 JAVA_HOME,则需要手动修改配置文件中的路径并重新加载。


方法 适用场景 优点 缺点
update-java-alternatives Debian/Ubuntu 系统 官方推荐,自动管理所有 Java 命令链接 需要手动设置 JAVA_HOME
/etc/profile.d/ 所有主流 Linux 发行版 (最推荐) 系统级生效,对所有用户有效,配置清晰 需要手动创建文件和 source
~/.bashrc / ~/.profile 仅对当前用户生效 不会影响其他用户,适合个人开发 新开终端或 source 才生效

对于绝大多数 Linux 用户,使用 update-java-alternatives 管理版本,并配合 /etc/profile.d/ 设置 JAVA_HOME 是最稳定、最规范的做法。

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