Gradle сборка завершается с помощью аннотированных классов Lombok

У меня есть проект JHipster, в котором я добавил зависимость для Lombok в build.gradle:

compile group: 'org.projectlombok', name: 'lombok', version: lombok_version

И у меня есть плагин Lombok, застопорившийся для IntelliJ. Я включил обработку аннотаций в IntelliJ, я могу строить без ошибок из IntelliJ IDE, но когда я пытаюсь построить из командной строки, я получаю ошибки сборки. Похоже, что Gradle не обрабатывает аннотации и не может найти объявления getter/setter и log. Проект также работает без каких-либо ошибок.

Командная строка:

./gradlew build

Ошибки:

/Users/.../source/v4.0/src/main/java/com/.../service/MyService.java:145: error: cannot find symbol
        log.info("Security Context: " + SecurityUtils.getCurrentUserLogin());
        ^
  symbol:   variable log
  location: class MyService

Ошибка:

/Users/.../source/v4.0/src/main/java/com/.../service/MyService.java:105: error: cannot find symbol
        myClass.setDescription(description);
                        ^
  symbol:   method setDescription(String)
  location: variable myClass of type MyClass

Класс обслуживания:

import lombok.extern.slf4j.Slf4j; 
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class MyService {      
    public void someMethod(){
        log.debug("Security Context: " + SecurityUtils.getCurrentUserLogin());
        MyClass myCLass = new MyClass();
        myClass.setDescription(description);
    }
}

Класс сущностей:

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(name="t_juror_file_update")
@Getter
@Setter
@NoArgsConstructor
public class MyClass {

    private String description;

}

Я пытался понять это часами, но полностью застрял. Любая помощь будет оценена.

Ответ 1

Вам нужно указать lombok как обработчик аннотации. Чтобы сделать это, вам нужно добавить следующее в build.gradle в проект Jhipster.

apply plugin: 'net.ltgt.apt'

dependencies {    
    provided "org.projectlombok:lombok:$lombokVersion"
    apt "org.projectlombok:lombok:$lombokVersion"

    /** ... */
}

Jhipster использует net.ltgt.gradle:gradle-apt-plugin для обработки аннотаций.

Для настройки IntelliJ необходимо проверить Enable annotation Processing.

Дополнительная информация: Проект Lombok - инструкции для Android

Ответ 2

У меня была такая же проблема, и я работал, когда был добавлен в build.gradle:

dependencies{

compileOnly 'org.projectlombok:lombok:1.18.8'
annotationProcessor 'org.projectlombok:lombok:1.18.8'

}

Ресурс: https://projectlombok.org/setup/gradle

Ответ 3

С той же проблемой, с которой я столкнулся, когда. /gradlew clean build работали нормально, но когда я пытался выполнить gradle clean build, методы getter и setter были созданы с помощью lombok, который не был найден во время сборки gradle. Как бросить сборку не удалось исключение для компиляции

Ранее у меня была версия 3.4.1 для Grapper-оболочки и версия 5.6.2 для Gradle. Так что я могу решить эту проблему, снизив мою версию Gradle до 4.10.0 где моя версия оболочки Gradle осталась прежней, т.е. 3.4.1

Это версия Gradle

Gradle 4.10

Время сборки: 2018-08-27 18:35:06 UTC Редакция: ee3751ed9f2034effc1f0072c2b2ee74b5dce67d

Котлин DSL: 1.0-rc-3 Котлин: 1.2.60 Groovy: 2.4.15 Ant: Apache Ant (TM) версия 1.9.11, скомпилированная 23 марта 2018 года JVM: 1.8.0_191 (Oracle Corporation 25.191-b12) ОС: Mac OS X 10.14.6 x86_64

Это версия оболочки Gradle

Gradle 3.4.1

Время сборки: 2017-03-03 19:45:41 UTC Редакция: 9eb76efdd3d034dc506c719dac2955efb5ff9a93

Groovy: 2.4.7 Ant: Apache Ant (TM) версии 1.9.6, скомпилирован 29 июня 2015 г. JVM: 1.8.0_191 (Oracle Corporation 25.191-b12) ОС: Mac OS X 10.14.6 x86_64

Это работает для меня