spring-boot - lombok 是否应该在 spring-boot-dependencies 中提供一个作用域?

标签 spring-boot

根据 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/

相关文章:

java - 如果我只想使用注释进行开发,我是否需要 *********ApplicationContext 类?

java - 手动设置 HttpStatus 时 @ExceptionHandler 失败

java - Spring Boot应用程序无法在Eclipse Oxygen中启动

java - Spring 启动: hibernate cannot mapping entity to table in postgresql: spring boot

java - 使用当前系统日期在单独的目录中为每个日期创建日志文件

Spring Boot Actuator端点配置似乎没有按预期工作

java - RabbitMQ - Java Spring - 如何初始化交换到多个队列?

java - 预检响应在 Angular 4 和 Spring Boot (RestAPI) 应用程序中具有无效的 HTTP 状态代码 403

mysql - 使用 Spring Data JPA 和 mysql 数据库接收 CommunicationsException

Java - Spring Boot - 无法在端口 8080 上启动 Web 服务器