spring-boot-maven-plugin,maven-compiler-plugin 功能对比

这是 Spring Boot 项目里两个最重要、但职责完全不同的 Maven 插件。一句话先总结:

**maven-compiler-plugin管"编译代码"**​

spring-boot-maven-plugin管"打包 & 启动 Spring Boot 应用"


一、核心功能对比表(重点)

对比项 maven-compiler-plugin spring-boot-maven-plugin
主要职责 .java编译成 .class 打包成可执行 Jar / 启动 Spring Boot
作用阶段 compile/ test-compile package/ run
是否 Spring 专用 ❌ 否(通用 Maven 插件) ✅ 是(Spring Boot 专用)
影响运行结果 ✅ 直接影响(字节码、参数名、语法) ✅ 间接影响(类路径、启动方式)
你之前遇到的问题 ✅ 参数名丢失(-parameters ❌ 不直接相关

二、maven-compiler-plugin(你现在最关键的)

✅ 它负责什么

  • Java 版本(source/ target/ release

  • 是否保留方法参数名(-parameters

  • 注解处理器(Lombok / MapStruct)

  • 编译错误、语法兼容性

✅ 你的正确配置 ✅

复制代码
复制代码
复制代码
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.13.0</version>
    <configuration>
        <source>17</source>
        <target>17</target>
        <parameters>true</parameters> <!-- 解决参数名问题 -->
    </configuration>
</plugin>

📌 没有它:

  • Controller 参数名丢失

  • Lombok / MapStruct 失效

  • Java 版本不一致


三、spring-boot-maven-plugin(打包 & 启动)

✅ 它负责什么

  • 打成 Fat Jar(包含所有依赖)

  • 设置 Main-Class

  • 提供 spring-boot:run

  • Repackage(把普通 jar 转成可执行 jar)

✅ 标准配置

复制代码
复制代码
复制代码
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <mainClass>com.xxx.Application</mainClass>
        <excludes>
            <exclude>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </exclude>
        </excludes>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

📌 没有它:

  • java -jar xxx.jar启动不了

  • no main manifest attribute


四、两者协作关系(非常重要)

复制代码
复制代码
复制代码
源代码 (.java)
   ↓  maven-compiler-plugin 编译
字节码 (.class)
   ↓  spring-boot-maven-plugin repackage
可执行 Spring Boot Jar

✅ **编译插件决定"能不能编出来"**​

Spring Boot 插件决定"能不能跑起来"


五、你之前几个问题的归属关系

问题 所属插件
Name for argument not specified ✅ maven-compiler-plugin
javax.servlet.ServletOutputStream ❌ 都不是(依赖问题)
Nacos gRPC 连接失败 ❌ 都不是(中间件问题)
mvn spring-boot:run ✅ spring-boot-maven-plugin
Lombok 不生效 ✅ maven-compiler-plugin

六、推荐的生产级组合(Java 17)

复制代码
复制代码
复制代码
<!-- 编译 -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.13.0</version>
    <configuration>
        <source>17</source>
        <target>17</target>
        <parameters>true</parameters>
        <annotationProcessorPaths>
            <path>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.32</version>
            </path>
        </annotationProcessorPaths>
    </configuration>
</plugin>

<!-- Spring Boot -->
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

七、一句话记忆法 ✅

**compiler 管"写得对不对"**​

spring-boot 管"跑得起跑不起"

如果你愿意,我也可以帮你 检查整个 pom.xml是否有冗余、冲突或版本不兼容 ,尤其是 Nacos + Spring Boot + Java 17​ 这套组合

相关推荐
白帽小阳8 分钟前
2026前端面试题!(附答案及解析)
javascript·网络·python·安全·web安全·网络安全·护网行动
凤凰院凶涛QAQ29 分钟前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构
乱写代码37 分钟前
Python开发技巧--类型注解Literal
python
卷无止境44 分钟前
Python FFI 技术深度解析:ctypes、cffi 与 pybind11 的性能差异与实践挑战
后端·python
郝学胜-神的一滴1 小时前
算法实战:最小k个数——大顶堆的优雅解法
开发语言·数据结构·c++·python·程序人生·算法·排序算法
掘金_答案1 小时前
上线那天,一个 ConcurrentHashMap 差点送走我的 AI 客服——3 天排查 JVM 血泪史
java·后端·架构
万笑佛2 小时前
Python 实现Kafka SASL认证生产消费
python
猿与禅2 小时前
CosId 分布式 ID 生成器完全教程:从架构原理到生产落地
java·shardingsphere·雪花算法·分布式id·高性能·cosid·号段模式
MindUp2 小时前
企业网盘权限模型解析:多层级访问控制与审计能力选型指南
java·linux·运维
NG4772 小时前
【软件设计与体系结构】-策略设计模式
java·设计模式·软件工程