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

如何配置Maven使用Java 8构建依赖Java 8的项目?

解决Maven使用Java 8构建项目的问题

问题背景

我的Maven项目依赖Java 8,希望构建时使用该版本,但本地Maven默认调用Java 21。已在pom.xml的properties及maven-compiler-plugin中配置Java 8版本,但执行mvn -version仍显示:

Maven home: /usr/local/Cellar/maven/3.9.6/libexec
Java version: 21.0.1, vendor: Homebrew, runtime: /usr/local/Cellar/openjdk/21.0.1/libexec/openjdk.jdk/Contents/Home
Default locale: en_IN, platform encoding: UTF-8
OS name: "mac os x", version: "13.4.1", arch: "x86_64", family: "mac"

执行mvn clean install时触发错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile) on project mtl-billing: Fatal error compiling: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid' -> [Help 1]

判断该错误与Java版本不匹配有关,切换到Java 8即可解决。本地已安装Java 8,which java输出:
/usr/local/opt/openjdk@8/bin/java

此前尝试在pom.xml的properties中配置低版本Maven:

<properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.version>3.0.4</maven.version>
</properties>

但该配置未生效。

解决方案

方法1:临时指定Java版本执行Maven命令

每次执行构建时,通过JAVA_HOME指定Java 8的JDK根目录(注意不是bin/java路径):

JAVA_HOME=/usr/local/opt/openjdk@8 mvn clean install

方法2:永久绑定项目到Java 8(使用maven-toolchains-plugin)

通过插件强制Maven使用指定JDK,无需每次手动配置:

  1. 在用户目录下创建~/.m2/toolchains.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<toolchains>
    <toolchain>
        <type>jdk</type>
        <provides>
            <version>1.8</version>
            <vendor>openjdk</vendor>
        </provides>
        <configuration>
            <jdkHome>/usr/local/opt/openjdk@8</jdkHome>
        </configuration>
    </toolchain>
</toolchains>
  1. 在项目pom.xml中添加插件配置,同时升级compiler-plugin到兼容Java 8的版本:
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-toolchains-plugin</artifactId>
            <version>3.1.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>toolchain</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <toolchains>
                    <jdk>
                        <version>1.8</version>
                        <vendor>openjdk</vendor>
                    </jdk>
                </toolchains>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

方法3:临时切换终端Java环境

在当前终端执行以下命令,临时将Java环境切换到8:

export JAVA_HOME=/usr/local/opt/openjdk@8
export PATH=$JAVA_HOME/bin:$PATH

之后执行mvn clean install即可使用Java 8,关闭终端后恢复默认配置。

关键注意点

  • 配置<maven.version>3.0.4</maven.version>无效,该属性无法改变本地安装的Maven版本,需通过JAVA_HOME或toolchains插件指定JDK版本。
  • 原报错也与maven-compiler-plugin版本过旧(3.3)有关,升级到3.8.1可避免与高版本JDK的兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:12:48