当通过 yum 安装 Maven 和 JDK 时,环境变量(如 MAVEN_HOMEJAVA_HOME)可能不会直接写入 /etc/profile~/.bashrc,而是通过以下机制配置:


1. 检查 /etc/profile.d/ 目录

许多 RPM 包会将环境变量配置脚本放在 /etc/profile.d/ 目录下,这些脚本会在用户登录时自动执行。

操作步骤:

1
2
3
4
5
6
7
8
9
# 列出所有以 "java" 或 "maven" 命名的配置文件
ls /etc/profile.d/*java* /etc/profile.d/*maven*

# 示例输出:
# /etc/profile.d/jdk.sh
# /etc/profile.d/maven.sh

# 查看文件内容(以 jdk.sh 为例)
cat /etc/profile.d/jdk.sh

典型内容:

1
2
3
# /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH=$JAVA_HOME/bin:$PATH

2. 检查 /etc/alternatives 符号链接

alternatives 是 Linux 用于管理多版本软件(如 Java)的系统,JDK 的路径可能通过符号链接动态配置。

操作步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看 Java 命令的实际路径
ls -l $(which java)

# 示例输出:
# /usr/bin/java -> /etc/alternatives/java

# 继续追踪符号链接
ls -l /etc/alternatives/java

# 示例输出:
# /etc/alternatives/java -> /usr/lib/jvm/java-11-openjdk-11.0.20.0.8-4.el9_8.x86_64/bin/java

# 提取 JAVA_HOME(截取 "/bin/java" 之前的部分)
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.20.0.8-4.el9_8.x86_64

3. 检查 Maven 的启动脚本

Maven 的 mvn 命令可能直接硬编码路径,或通过脚本动态配置 MAVEN_HOME

操作步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看 mvn 命令的实际路径
ls -l $(which mvn)

# 示例输出:
# /usr/bin/mvn -> /etc/alternatives/mvn

# 继续追踪符号链接
ls -l /etc/alternatives/mvn

# 示例输出:
# /etc/alternatives/mvn -> /usr/share/maven/bin/mvn

# 查看 mvn 脚本内容
head -n 20 /usr/share/maven/bin/mvn

典型内容:

1
2
3
#!/bin/bash
MAVEN_HOME=$(dirname $(dirname $(readlink -f $0))) # 自动解析 MAVEN_HOME
export MAVEN_HOME

4. 检查 /etc/bashrc/etc/environment

某些系统可能将全局环境变量配置在 /etc/bashrc/etc/environment 中。

操作步骤:

1
2
3
4
5
# 检查 /etc/bashrc
grep -E 'MAVEN_HOME|JAVA_HOME' /etc/bashrc

# 检查 /etc/environment
grep -E 'MAVEN_HOME|JAVA_HOME' /etc/environment

5. 验证默认环境变量

如果以上位置均未找到配置,可能是通过 alternatives 或其他机制动态设置,或依赖默认路径。

操作步骤:

1
2
3
4
5
6
7
8
# 直接打印当前环境变量(受登录会话影响)
echo $MAVEN_HOME
echo $JAVA_HOME

# 如果未输出,尝试手动配置(临时生效)
export MAVEN_HOME=/usr/share/maven
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk

总结与解决方案

  1. 如果找到配置文件(如 /etc/profile.d/jdk.sh):
    • 确保文件已通过 source /etc/profile.d/jdk.sh 加载,或重启终端。
  2. 如果未找到配置文件

    • 手动配置(推荐):
      将以下内容添加到 /etc/profile(全局)或 ~/.bashrc(当前用户):
      1
      2
      3
      export MAVEN_HOME=/usr/share/maven
      export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
      export PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
    • 验证配置
      1
      2
      3
      source ~/.bashrc
      mvn -v
      java -version
  3. 手动配置
    编辑文件vi /etc/profile

    1
    2
    3
    export MAVEN_HOME=/usr/share/maven
    export JAVA_HOME=/usr/lib/jvm/java
    export PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH

    source /etc/profile 之后查看

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [root@instance-20250602-1117 java]# mvn -v
    Apache Maven 3.6.3 (Red Hat 3.6.3-22)
    Maven home: /usr/share/maven
    Java version: 17.0.15, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-17-openjdk-17.0.15.0.6-2.0.1.el9.aarch64
    Default locale: en_US, platform encoding: UTF-8
    OS name: "linux", version: "5.15.0-308.179.6.3.el9uek.aarch64", arch: "aarch64", family: "unix"
    [root@instance-20250602-1117 java]# echo $JAVA_HOME
    /usr/lib/jvm/java
    [root@instance-20250602-1117 java]# echo $MAVEN_HOME
    /usr/share/maven
    [root@instance-20250602-1117 java]# java -version
    openjdk version "17.0.15" 2025-04-15 LTS
    OpenJDK Runtime Environment (Red_Hat-17.0.15.0.6-2.0.1) (build 17.0.15+6-LTS)
    OpenJDK 64-Bit Server VM (Red_Hat-17.0.15.0.6-2.0.1) (build 17.0.15+6-LTS, mixed mode, sharing)

附:为什么 yum 不自动配置环境变量?

  • 灵活性yum 安装的软件通常遵循最小侵入原则,避免污染全局环境。
  • 多版本管理:通过 alternatives 管理多版本时,环境变量需手动配置以明确优先级。

通过以上步骤,您应该能定位或手动配置 MAVEN_HOMEJAVA_HOME。如果仍有问题,请提供 rpm -ql mavenrpm -ql java-11-openjdk-devel 的输出,以便进一步排查。