在Maven项目里,maven-compiler-plugin负责把Java源代码编译成字节码。如果不在pom.xml中显式配置它,Maven会使用与自身版本绑定的默认插件版本,这个版本往往偏低,可能不支持你正在使用的Java语法特性。因此明确设置插件版本和编译级别,是保持构建稳定的基本做法。

插件配置的基本位置
配置必须写在项目根标签下的<build> 内的 <plugins> 列表中。每一个插件用一个 <plugin> 节点描述,通过 groupId、artifactId 和 version 来定位具体插件。
常见版本与编译参数设置
下面给出一个最常见的配置示例,指定插件版本为 3.11.0,并将源码与目标字节码级别都设为 Java 17。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>1.0.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
<plugins>
</build>
</project>
使用 release 代替 source 和 target
从 Java 9 开始,官方推荐用 release 参数一次性指定编译版本,避免引导类路径不一致的问题。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<release>17</release>
</configuration>
</plugin>
为什么必须写 version
如果不写 version,Maven 会使用超级 POM 里预定义的版本。不同 Maven 发行版绑定的编译器插件版本不同,这会导致同一份代码在别人机器上构建时出现奇怪的兼容性问题。显式声明 version 可以锁定行为。
在 properties 中统一管理版本
当项目中有多个插件或模块时,可以把版本号提取到 <properties> 中,方便统一升级。
<properties>
<maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version>
<java.release>17</java.release>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<release>${java.release}</release>
</configuration>
</plugin>
</plugins>
</build>
检查配置是否生效
可以在项目根目录执行下面的命令,查看生效的插件版本与配置。
mvn help:effective-pom
或者只编译并观察输出日志中出现的编译器插件版本号,确认与 pom.xml 中设定的一致。
| 配置项 | 作用 |
|---|---|
| version | 锁定 maven-compiler-plugin 自身版本 |
| source / target | 分别指定源码级别和生成字节码级别 |
| release | 统一指定编译版本,推荐在新项目中使用 |
只要把上述配置写进 pom.xml 的 build 区域,Maven 在每次构建时就会使用你定义的编译器插件版本和 Java 级别,减少环境差异带来的问题。
Mavenmaven-compiler-pluginpom_xml修改时间:2026-07-30 10:21:22