Lombok не работает с плагином 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>

И текст 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, у меня возникает следующая ошибка:

[ОШИБКА] Не удалось выполнить цель org.apache.maven.plugins: maven-compiler-plugin: 3.1: компиляция (компиляция по умолчанию) для проекта service-api: Ошибка компиляции: Ошибка компиляции: [ОШИБКА] D: \ Projects \? ????? \ service-api \ src \ main \ java \ TestCall.java: [7, -1] [ОШИБКА] 1. ОШИБКА в D: \ Projects \ ??????? \ service-api \ src \ main \ java \ TestCall.java (в строке 7) [ОШИБКА] dto.setTestStr ("Моя тестовая строка."); [ОШИБКА] ^^^^^^^^^^ [ОШИБКА] Метод setTestStr (String) не определен для типа TestDto [ОШИБКА] ---------- [ОШИБКА] 1 проблема (1 ошибка) [ERROR] [ERROR] Обнаружена 1 ошибка и 0 предупреждений.

Похоже, что функции lombok не работают в плагине spting. Однако, если я использую стандартный maven-compiler-plugin (версия 3.5.1), все работает правильно. Но пока мы хотим использовать встроенный контейнер Spring Boot, и мы не готовы менять рабочий процесс сборки. Можно ли что-то сделать с этой проблемой? Может, стоит включить какие-то особые зависимости или что-то в этом роде?


person eGoLai    schedule 27.06.2016    source источник
comment
сгенерировал новый загрузочный (web + lombok) проект maven через start.spring.io и поместил простой класс данных lombok в нем и он отлично работает. gist.github.com/zapl/1d238b278b8cc68e330e4bf1048943a8, а исходный код java является сгенерированным, а не сгенерированным (добавлен класс данных), spring-boot:run выводит приветствие, как и ожидалось.   -  person zapl    schedule 27.06.2016
comment
Проблема в том, что у меня есть родительский pom с плагином groovy-eclipse-compiler. Итак, я выяснил, как это должно быть настроено для ломбока в этой теме: stackoverflow.com/questions/8524891/   -  person eGoLai    schedule 27.06.2016


Ответы (3)


Проблема была в родительском 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>
person eGoLai    schedule 27.06.2016

Поскольку 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>

Дополнительные сведения см. В документации подключаемого модуля.

person hotzst    schedule 27.06.2016
comment
Плагин не требуется, если вы используете компилятор, поддерживающий JSR 269 Pluggable Annotation Processing API. Это стандартный способ использования ломбока. - person Magnus; 27.06.2016
comment
Этот плагин необходим для создания расширенных исходников. Я думаю, что добавление промежуточных сгенерированных источников - плохая идея. Как сказано на официальном веб-сайте, мне нужно только иметь lomok lib в проходе класса во время компиляции проекта: projectlombok.org/mavenrepo/index.html - person eGoLai; 27.06.2016

Если вы испытываете это с помощью IDE (например, eclipse) -

Это решение.

Установите и запустите jar-файл lombok-ide из здесь

person lingar    schedule 27.06.2021