问题
解决方法
将pom.xml文件中的圈出的代码删掉
完整配置与简化配置区别
这两段Maven配置的主要区别在于是否包含`maven-compiler-plugin`的配置。
第一段配置(完整配置)
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
第二段配置(简化配置)
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
主要区别
1. maven-compiler-plugin配置:
- 第一段配置显式配置了`maven-compiler-plugin`,并指定了Lombok作为注解处理器
- 第二段配置没有包含这个插件配置
2. Lombok处理方式:
- 第一段配置确保在编译阶段正确处理Lombok注解
- 第二段配置依赖默认的编译行为,可能在某些环境下需要额外的Lombok配置
3. 打包排除:
- 两段配置都包含了spring-boot-maven-plugin的配置,排除了Lombok从最终包中
使用建议
1. 使用第一段配置(完整配置)当:
- 项目中使用Lombok
- 需要确保编译时正确处理Lombok注解
- 开发环境可能没有全局配置Lombok注解处理器
2. 使用第二段配置(简化配置)当:
- 项目中没有使用Lombok
- 或者开发环境已经全局配置了Lombok支持
- 只需要确保打包时不包含Lombok
补充说明
- 现代Spring Boot项目通常不需要显式配置maven-compiler-plugin,因为:
- 大多数IDE已经内置支持Lombok
- Maven的默认编译器配置通常足够
- spring-boot-maven-plugin的排除配置是必要的,因为:
- Lombok是编译时依赖,不应该包含在最终部署包中
- 可以减少部署包的大小