Maven插件:maven-compiler-plugin

12/31/2025 Maven

目录


参考:

  • 链接:

# Maven插件:maven-compiler-plugin

maven-compiler-plugin 是 Maven 构建工具的核心插件之一,主要用于‌编译 Java 源代码‌,确保代码能被正确转换为可执行的字节码(.class 文件)。


#1. 核心作用

功能 说明
源代码编译 src/main/javasrc/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

<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.13.11.0,需通过 <source><target> 指定版本‌

    <version>3.8.1</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
    
    1
    2
    3
    4
    5
  • JDK 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>
上次更新时间: 4/9/2025, 2:43:42 AM