根据Project Lombok文档,lombok依赖项应该是一个提供的范围(https://projectlombok.org/setup/maven)。该范围是否应在spring-boot-dependencies pom.xml的<dependencyManagement>
内定义?
答案 0 :(得分:2)
spring-boot-dependencies pom.xml只是对可以很好地协同工作的库版本的描述。它们在dependencyManagement中定义。
如果您具有Spring Boot应用程序,并且想要使用lombok,则必须在项目pom的“ dependency”部分中明确指出,但是您可以排除该版本,因为spring-boot-中已经定义了该版本依赖性。而且,您还可以声明该依赖项是“提供”的,或者更好但又是“可选的”。
<scope>provided</scope>
表示需要库才能进行编译和
测试类路径,但是它是由某种容器提供的
<optional>true</optional>
意味着编译需要一个库,但是在运行时则不需要
编辑:似乎Spring Boot maven插件总是打包您的依赖项,即使您将它们声明为可选或已提供,至少在将应用程序打包为jar时,我也没有进行过测试。
原因是一个jar包含一个嵌入式servlet容器,而Spring Boot打包需要为该容器提供所提供的库,这是有道理的! (谢谢@Peter Wippermann)。
我想得出的结论是,使用Spring Boot maven插件打包jar时,是否为lombok提供作用域并不重要,因为该库将始终被打包,除非出于语义原因要使用作用域...
对于不包含在包中的lombok,您只需要使用排除配置来配置Spring Boot maven插件。
<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>