You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS 8环境下Maven无法使用指定Java15版本编译项目的问题求助

我来帮你解决这个Maven编译版本不匹配的问题——这种情况确实有点迷惑,明明mvn -version显示用的是Java15,编译时却偷偷调用了Java8。下面是几个可行的解决方案,按优先级排序:

1. 强制在pom.xml中指定编译器插件的JDK版本

这是最可靠的方式,直接让Maven编译时使用你想要的JDK。打开项目的pom.xml,找到build下的plugins节点(如果没有就新增),添加或修改maven-compiler-plugin的配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version> <!-- 保持你当前的插件版本 -->
            <configuration>
                <source>15</source>
                <target>15</target>
                <fork>true</fork> <!-- 关键:启动独立JVM执行编译,确保使用指定JDK -->
                <executable>${JAVA_HOME}/bin/javac</executable>
            </configuration>
        </plugin>
    </plugins>
</build>

配置里的<fork>true</fork>是核心,它会让Maven单独启动一个使用JAVA_HOME的JVM进程来编译代码,避免和系统默认JDK混淆。

2. 确认环境变量的有效性

虽然你已经设置了JAVA_HOME和PATH,但有时候在终端会话或某些执行场景下,环境变量可能没有正确加载。执行以下命令验证当前会话的配置:

echo $JAVA_HOME
echo $PATH
which java

如果which java的输出不是/opt/jdk-15.0.2+7/bin/java,说明PATH优先级有问题。可以尝试重新加载shell配置文件(比如source ~/.bashrc,根据你使用的shell调整),或者退出当前终端重新登录。

3. 检查Maven的全局/用户配置文件

系统级或用户级的Maven配置可能偷偷指定了其他JDK路径。检查这两个文件:

  • 系统配置:/usr/share/maven/conf/settings.xml
  • 用户配置:~/.m2/settings.xml

看看里面有没有类似下面的<profile>配置,如果有,修改或删除它:

<profiles>
    <profile>
        <id>default</id>
        <properties>
            <java.home>/usr/lib/jvm/java-1.8.0-openjdk...</java.home>
        </properties>
    </profile>
</profiles>

4. 临时强制指定JDK执行Maven

如果上面的方法都没生效,可以在执行编译命令时直接指定JAVA_HOME,临时覆盖环境变量:

JAVA_HOME=/opt/jdk-15.0.2+7 mvn package

完成上述操作后,重新执行mvn package -X,查看日志开头的Java版本,应该就会显示15.0.2了。

内容的提问来源于stack exchange,提问作者Philipp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 11:23:30