根据 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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2782 次 |
| 最近记录: |