簡體   English   中英

龍目島不適用於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>

還有在我的應用中用於測試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);
        }

    }

因此,當我從插件甚至是簡單的命令mvn compile運行spring-boot:run時,我會遇到下一個錯誤:

[錯誤]無法在項目service-api上執行目標org.apache.maven.plugins:maven-compiler-plugin:3.1:compile(默認編譯):編譯失敗:編譯失敗:[ERROR] D:\\ Projects \\? ????? \\ service-api \\ src \\ main \\ java \\ TestCall.java:[7,-1] [錯誤] 1. D:\\ Projects \\ ??????? \\ service-api \\中的錯誤src \\ main \\ java \\ TestCall.java(在第7行)[錯誤] dto.setTestStr(“我的測試字符串。”); [錯誤]類型TestDto的方法setTestStr(String)未定義。[錯誤] ---------- [錯誤] 1個問題(1個錯誤) [錯誤] [錯誤]發現1錯誤和0警告。

似乎lombok功能在spting插件上不起作用 但是,如果我使用標准的maven-compiler-plugin (版本3.5.1),則一切正常。 但是目前,我們想使用Spring Boot嵌入式容器,並且還沒有准備好更改構建工作流程。 是否可以對此問題采取措施? 也許我應該包括一些特殊的依賴項或類似的東西?

由於Lombok生成了一些樣板代碼,因此您不必這樣做,因此必須有一種初始化此生成的方法。 對於您的IDE,您可以使用一個插件來完成。 但是,對於Maven構建,您需要一個構建步驟,該步驟告訴maven應該生成相關代碼(在build部分中):

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

有關更多詳細信息,請檢查插件文檔

問題出在包含下一個插件的父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和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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM