这是 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 这套组合