lombok是否应该在spring-boot-dependencies中提供范围?

时间:2017-07-19 23:24:19

标签: spring-boot

根据Project Lombok文档,lombok依赖项应该是一个提供的范围(https://projectlombok.org/setup/maven)。该范围是否应在spring-boot-dependencies pom.xml的<dependencyManagement>内定义?

1 个答案:

答案 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>