Maven插件:maven-compiler-plugin
accttodo 12/31/2025 Maven
目录
参考:
# Maven插件:maven-compiler-plugin
maven-compiler-plugin
是 Maven 构建工具的核心插件之一,主要用于编译 Java 源代码,确保代码能被正确转换为可执行的字节码(.class
文件)。
# 1. 核心作用
功能 | 说明 |
---|---|
源代码编译 | 将 src/main/java 和 src/test/java 中的 .java 文件编译为 .class 文件 |
版本控制 | 指定源代码兼容的 JDK 版本(<source> )和生成的字节码版本(<target> ) |
编码设置 | 统一源码文件的字符编码(如 UTF-8),避免乱码问题 |
编译器参数 | 传递额外的编译选项(如生成调试信息、启用注解处理等) |
模块化支持 | 处理 JDK 9+ 的模块化项目(module-info.java ) |
# 2. 关键配置参数
<!--配置-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>17</java.version>
</properties>
<!-- 统一管理插件配置 -->
<build>
<pluginManagement>
<plugins>
<!-- 配置 maven-compiler-plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version> <!-- 指定明确版本 -->
<configuration>
<!-- JDK 9+ 推荐 <release> 替代 <source>/<target> -->
<source>${java.version}</source> <!-- 指定编译器的源代码版本 -->
<target>${java.version}</target> <!-- 指定编译后的目标字节码版本 -->
<release>${java.version}</release> <!-- 统一控制编译器的源代码版本、目标字节码版本,并确保与指定 JDK 版本的 API 兼容性 -->
<!-- 统一编码 -->
<encoding>${project.build.sourceEncoding}</encoding>
<!-- 可选:其他高级配置 -->
<compilerArgs>
<arg>-parameters</arg> <!-- 保留方法参数名(用于反射) -->
<arg>-Xlint:unchecked</arg> <!-- 启用警告检查 -->
</compilerArgs>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<release>
与 <source>
/<target>
的区别
参数 | 作用范围 | 适用场景 |
---|---|---|
<source> | 仅指定源代码兼容的 JDK 版本 | 传统配置(JDK 8 及以下) |
<target> | 仅指定生成字节码兼容的 JDK 版本 | 传统配置(JDK 8 及以下) |
<release> | 同时控制: - 源代码版本 - 字节码版本 - 可访问的 JDK API 版本范围 | 模块化项目(JDK 9 及以上) |
使用建议
- JDK 8 及以下:使用
<source>
+<target>
(因<release>
不支持低版本) - JDK 9 及以上:优先使用
<release>
实现严格版本控制。
原因说明
- JDK 8 的编译器未实现
--release
参数(底层 Javac 的编译选项),强行使用会导致无效的标记: --release
错误。 - 从 JDK 9 开始,该参数用于严格限制编译时使用的 API 范围(例如避免意外调用高版本 JDK 的 API)。
# 3. 插件版本说明
以下是关于 maven-compiler-plugin
版本的详细说明,综合了不同场景下的版本选择建议和配置要点:
# 版本与 JDK 兼容性
插件版本 | 支持的 JDK 版本范围 | 关键特性或限制 |
---|---|---|
3.8.1 | JDK 1.5 - JDK 11 | 传统 <source>/<target> 配置 |
3.11.0 | JDK 8 - JDK 17 | 初步支持 Java 17 模块化 |
3.13.0+ | JDK 9 - JDK 21+ | 推荐使用 <release> 参数 |
3.14.0 | JDK 11 - JDK 22 | 支持非 Javac 编译器(如 AspectJ) |
# 版本选择建议
JDK 8 项目:使用
3.8.1
或3.11.0
,需通过<source>
和<target>
指定版本<version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration>
1
2
3
4
5JDK 17+ 项目:优先使用
3.13.0+
,推荐<release>
参数<version>3.14.0</version> <configuration> <release>17</release> </configuration>
1
2
3
4
# 版本升级注意事项
- 测试验证:升级后需验证模块化项目(
module-info.java
)的兼容性。 - 依赖冲突:确保其他插件(如
maven-surefire-plugin
)兼容新版本。
# 3. 常见问题解决
问题现象 | 原因与解决方案 |
---|---|
**编译警告 未检查或不安全操作 ** | 添加 <compilerArgs><arg>-Xlint:unchecked</arg></compilerArgs> 明确警告 |
JDK 版本不匹配错误 | 检查 JAVA_HOME 环境变量,确保与 <source>/<target> 一致 |
模块化项目编译失败 | JDK 9+ 项目必须使用 <release> 替代 <source>/<target> |