【问题标题】:Lombok doesn't work with spring-boot-maven-pluginLombok 不适用于 spring-boot-maven-plugin
【发布时间】:2016-06-27 11:09:12
【问题描述】:

我有 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>

以及用于在我的应用中测试龙目岛的文本 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:run 甚至是一个简单的命令 mvn compile 时,我会遇到下一个错误:

[ERROR] 未能执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.1:compile 项目服务 api 上的(默认编译):编译失败: 编译失败:[错误] D:\Projects\??????\service-api\src\main\java\TestCall.java:[7,-1] [错误] 1. 错误 D:\Projects\???????\service-api\src\main\java\TestCall.java (在第 7 行)[ERROR] dto.setTestStr("My Test String."); [错误] ^^^^^^^^^^ [错误] 方法 setTestStr(String) 未定义 键入 TestDto [ERROR] ---------- [ERROR] 1 个问题(1 个错误)[ERROR] [ERROR] 发现 1 个错误和 0 个警告。

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

【问题讨论】:

标签: java spring-boot lombok


【解决方案1】:

问题出在包含下一个插件的父 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>

【讨论】:

    【解决方案2】:

    由于 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

    【讨论】:

    • 如果使用支持 JSR 269 Pluggable Annotation Processing API 的编译器,则不需要该插件。这是使用 lombok 的标准方式。
    • 这个插件需要生成扩展源。我认为添加临时生成的源是一个坏主意。正如官方网站上所说,我只需要在编译项目期间在类传递中有一个 lomok 库:projectlombok.org/mavenrepo/index.html
    【解决方案3】:

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

    This 是解决方案。

    here安装并运行lombok-ide jar

    【讨论】:

      猜你喜欢
      • 2019-02-24
      • 2018-08-25
      • 2023-02-01
      • 2020-02-04
      • 2022-01-16
      • 2017-06-20
      • 2011-05-08
      • 2017-07-30
      • 1970-01-01
      相关资源
      最近更新 更多