Spring Boot 排除 Lombok 插件的目的是什么?

6 java spring lombok spring-boot

我知道 Lombok 是什么,它通过使用一些注释来最小化样板代码。Lombok 使用 Java 内部结构在编译时生成等效的 Java 代码[参考]。因此,它在编译时不需要任何显式插件或 Maven/Gradle 构建阶段。

在查看 Spring Boot 项目的 pom.xml 时,我看到下面的插件部分,我想知道这个排除是关于什么的。

<build>
    <plugins>
        <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>
    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

And*_*lov 9

好吧,问题如下:Lombok 是一个注释处理器,Lombok 生成的代码不再依赖于 Lombok。在 Maven 术语中,这意味着对 Lombok 的依赖应该具有provided范围(以便不将 Lombok jar 包含到目标工件中)。不幸的是,Spring 开发人员对于scope= 的依赖关系有另一种看法provided。请检查此对话:Maven需要为托管依赖项指定插件版本 spring-boot-configuration-processor

因此,您的配置显式地从目标工件中删除了 Lombok jar。