Lombok 不适用于 spring-boot-maven-plugin

Lombok doesn't work with spring-boot-maven-plugin

我有 Spring-boot 应用程序 以及下一个 插件和依赖项:

<!--...-->
 <dependency>
    <groupId>org.springframework.security.oauth</groupId>
    <artifactId>spring-security-oauth2</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>


    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.8</version>
        <scope>provided</scope>
    </dependency>

<!--...-->

<build>
        <finalName>service-api</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>attached</goal>
                        </goals>
                        <configuration>
                            <descriptors>
                                <descriptor>service-api.xml</descriptor>
                            </descriptors>
                            <appendAssemblyId>false</appendAssemblyId>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>com.alexecollins.docker</groupId>
                <artifactId>docker-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

在我的应用程序中 testing lombok 的文本 2 类:

import lombok.Data;

@Data
public class TestDto {

    private String testStr;
}

   public class TestCall {

        public void testLombok() {
            TestDto dto = new TestDto();

            dto.setTestStr("My Test String.");

            System.out.println(dto);
        }

    }

所以,当我从插件 运行 spring-boot:运行 甚至一个简单的命令 mvn compile,我有下一个错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project service-api: Compilation failure: Compilation failure: [ERROR] D:\Projects\??????\service-api\src\main\java\TestCall.java:[7,-1] [ERROR] 1. ERROR in D:\Projects\???????\service-api\src\main\java\TestCall.java (at line 7) [ERROR] dto.setTestStr("My Test String."); [ERROR] ^^^^^^^^^^ [ERROR] The method setTestStr(String) is undefined for the type TestDto [ERROR] ---------- [ERROR] 1 problem (1 error) [ERROR] [ERROR] Found 1 error and 0 warnings.

lombok 功能似乎不适用于 spting 插件。 但是,如果我使用标准 maven-compiler-plugin(版本 3.5.1),一切正常。但是现在我们想使用 spring 启动嵌入式容器,我们还没有准备好改变我们的构建工作流程。 有可能解决这个问题吗?也许我应该包括一些特殊的依赖关系或类似的东西?

由于 Lombok 会生成一些样板代码,因此您不必这样做,因此必须有一种方法来初始化这一代。对于你的 IDE 你有一个插件可以做到这一点。但是,对于 Maven 构建,您需要一个构建步骤来告诉 Maven 应该生成相关代码(在构建部分中):

<plugin>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok-maven-plugin</artifactId>
    <version>1.16.8.0</version>
    <executions>
    <execution>
        <phase>generate-sources</phase>
        <goals>
        <goal>delombok</goal>
        </goals>
    </execution>
    </executions>
</plugin>

有关详细信息,请查看 documentation of the plugin

问题出在包含下一个插件的父 pom 中:

  <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <compilerId>groovy-eclipse-compiler</compilerId>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>org.codehaus.groovy</groupId>
                            <artifactId>groovy-eclipse-compiler</artifactId>
                            <version>2.9.2-01</version>
                        </dependency>
                        <dependency>
                            <groupId>org.codehaus.groovy</groupId>
                            <artifactId>groovy-eclipse-batch</artifactId>
                            <version>2.4.3-01</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </pluginManagement>

所以,我在这里找到了解决方案:Maven Groovy and Java + Lombok

现在我的 groovy-eclipse-compiler 插件是:

    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <compilerId>groovy-eclipse-compiler</compilerId>
                    <verbose>true</verbose>
                    <fork>true</fork>
                    <compilerArguments>
                        <javaAgentClass>lombok.launch.Agent</javaAgentClass>
                    </compilerArguments>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.codehaus.groovy</groupId>
                        <artifactId>groovy-eclipse-compiler</artifactId>
                        <version>2.9.2-01</version>
                    </dependency>
                    <dependency>
                        <groupId>org.codehaus.groovy</groupId>
                        <artifactId>groovy-eclipse-batch</artifactId>
                        <version>2.4.3-01</version>
                    </dependency>
                    <dependency>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>1.16.8</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </pluginManagement>

如果您使用 IDE(如 eclipse)遇到这种情况 -

This 是解决方案。

安装并 运行 来自 here

的 lombok-ide jar