根据 Project Lombok 文档,lombok 依赖项应该是提供的范围 ( https://projectlombok.org/setup/maven )。该范围是否应在 <dependencyManagement>
内定义spring-boot-dependencies pom.xml?
最佳答案
spring-boot-dependencies pom.xml 只是对协同工作的库版本的描述。它们在dependencyManagement 中定义。
如果您有一个 Spring Boot 应用程序并且想要使用 lombok,则必须在项目 pom 的“依赖项”部分中明确说明这一点,但您可以排除该版本,因为它已在 spring-boot-dependencies 中定义。并且您还可以声明依赖项是“提供的”或更好的“可选的”。<scope>provided</scope>
意味着需要该库进行编译和
测试类路径,但是它是由某种容器提供的<optional>true</optional>
意味着编译需要一个库,但在运行时不需要
编辑:似乎 Spring Boot maven 插件总是打包您的依赖项,即使您将它们声明为可选或提供的,至少当您将应用程序打包为 jar 时,我没有使用 war 进行测试。
原因是一个 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>
关于spring-boot - lombok 是否应该在 spring-boot-dependencies 中提供一个作用域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45202639/