如何防止lombok被打包成Spring Boot jar?

How to prevent lombok from being packaged into Spring Boot jar?

如果你访问官方 Lombok Maven guide,你会看到它的范围应该是 provided。 当我使用 start.spring.io 从头开始​​创建一个新项目并添加 Lombok 时,它只会在结果 pom.xml 中得到 <optional>true</optional>。 然后我像这样打包 Spring 引导应用程序,出于好奇决定查看 jar 中打包的内容:

mvn clean package -DskipTests=true && unzip target/demo-0.0.1-SNAPSHOT.jar -d exploded

Lombok 已打包,无论我将范围设置为 provided 还是只有 optional=true.

都无所谓

如何防止 Lombok 被包含到 Spring Boot jar 中?

我最后的想法是尝试 Spring 引导插件附带的另一个目标:

mvn spring-boot:repackage

但不幸的是它产生了以下错误:

repackage failed: Source file must be provided

看起来它是您的一个依赖项的传递依赖项。如果你确认了,你就知道该怎么做了。

如果您打包 war 文件,Lombok 将仅在 lib 提供的单独文件夹中可用,而不是通常的 lib 文件夹中。

为了从最终的 jar/war 文件中完全排除 lombok,您必须这样做:

    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>2.3.1.RELEASE</version>
        <configuration>
            <excludes>
                <exclude>
                    <groupId>org.projectlombok</groupId>
                    <artifactId>lombok</artifactId>
                </exclude>
            </excludes>
        </configuration>
    </plugin>

有关详细信息,请参阅 Spring Boot Maven 插件 https://docs.spring.io/spring-boot/docs/2.3.x/maven-plugin/reference/html/#repackage-example-exclude-dependency 的排除依赖部分。