Подтвердить что ты не робот

Maven build не может найти символ при доступе к аннотированным методам проекта lombok,

Я использую проект lombok в первый раз, и у меня проблемы с компиляцией проекта через maven, когда я запускаю сборку, я получаю ошибки, где вызываются методы, аннотированные аннотациями проекта lombok.

Это аннотированный параметр:

    private @Getter @Setter String paymentNonce = null;

и в этой строке, например, maven разбивает сборку:

if (!StringUtilities.isNullOrEmpty(getPaymentNonce())) {

это моя зависимость от maven

<dependency> 
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.4</version> 
</dependency>

ошибка maven:

[INFO] Compiling 158 source files to C:\java\repos\luna\cloudflow\cloudflow-ejb\target\classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] \java\repos\luna\cloudflow\cloudflow-ejb\src\main\java\si\arctur\controller\PaymentProcessor.java:[94,38] error: cannot find symbol
[ERROR] \java\repos\luna\cloudflow\cloudflow-ejb\src\main\java\si\arctur\controller\PaymentProcessor.java:[97,106] error: cannot find symbol
[ERROR] \java\repos\luna\cloudflow\cloudflow-ejb\src\main\java\si\arctur\controller\PaymentProcessor.java:[142,2] error: cannot find symbol
[ERROR] \java\repos\luna\cloudflow\cloudflow-ejb\src\main\java\si\arctur\controller\ShoppingCart.java:[27,6] error: cannot find symbol
[ERROR] \java\repos\luna\cloudflow\cloudflow-ejb\src\main\java\si\arctur\controller\ShoppingCart.java:[32,75] error: cannot find symbol
.....

Я использую java 8

4b9b3361

Ответ 1

Я понизил lombok до 1.14.8, эта версия работает с maven build, я не нашел, почему 1.16 verson не работает:(

Ответ 2

Была ли та же проблема с использованием maven-compiler-plugin v.2.3.2 После обновления версии до 3.5 проблема исчезла

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.5</version>
    <configuration>
        ...
    </configuration>
</plugin>

Надеюсь, что это поможет

Ответ 3

Я действительно смог решить эту проблему, следуя ответу, размещенному здесь:

MapStruct и Lombok не работают вместе

В основном мне пришлось добавить lombok в maven-compiler-plugin <annotationProcessorPaths>

Ответ 4

Короче говоря, обновите maven-compiler-plugin до 2.4 или перейдите на lombok ниже 1.14.*.

Кажется, что maven-compiler-plugin ниже 2.4 не поддерживает javax.annotation.processing.Processor с именем с $.

Обновление. Вы можете настроить maven-compiler-plugin на fork или обновить plexus-compiler-javac до 1.8.6. (maven-compiler-plugin 2.3.2 требуется 1.8.1, а 2.4 требуется 1.8.6)

Так как 1.16, lombok использует ShadowClassLoader, что предотвращает продвижение IDE для внутреннего класса lombok. Однако он не использует ShadowClassLoader, если загрузчик классов org.codehaus.plexus.compiler.javac.IsolatedClassLoader. (Я не знаю, почему парни ломбок используют жесткий код для решения других проблем, связанных с plexus-compiler-javac.)

maven-compiler-plugin 2.4, вернее, plexus-compiler-javac 1.8.6, не использует org.codehaus.plexus.compiler.javac.IsolatedClassLoader, поэтому он снова работает.

Ответ 5

Если вы используете статические методы, связанные с Lombok (в основном @Builder) со статическим импортом, вы можете столкнуться с подобными проблемами (даже в других частях вашего кода!).

Существует открытая проблема: https://github.com/rzwitserloot/lombok/issues/979

Текущее обходное решение - просто не использовать статический импорт, например. изменить

import static my.org.Foo.FooBuilder
 ...
FooBuilder builder = Foo.builder();

to:

Foo.FooBuilder builder = Foo.builder(); // note >>Foo.<<FooBuilder; without static import

Ответ 6

Моим решением было префикс аннотации с именем пакета lombok.

@lombok.Builder
@lombok.experimental.Accessors(prefix = "m", chain = true)

а не

@Builder
@Accessors(prefix = "m", chain = true)

Ответ 7

Если вы используете аннотации lombok в статических классах, в этом случае вам нужно будет указать полное имя класса ie. вместо @Data до @lombok.Data. Это сработало для меня.

Ответ 8

Может быть, вы указали -proc:none или явно указанные обработчики аннотаций, используя -processor <processorclass> в вашей java-компиляции (javac)?

Ответ 9

В моем случае это было решено путем обновления JDK (было 1.8.0_66, теперь 1.8.0_92)

Ответ 10

попробуйте указать параметр для модуля "ломбок" в зависимостях. Я столкнулся с той же проблемой и разрешил это с помощью этой работы.

Ответ 11

Я не знаю, но по какой-то причине это решает мою проблему.

У меня есть два класса, которые используют @Builder для генерации метода сборки. Но один нормальный, другой ненормальный. Я проверил все, и кажется, все в порядке. Но когда я запускаю mvn для компиляции моего проекта, ошибка выглядит следующим образом:

Не могу найти конструктор метода символов()

import lombok.*;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
class A {

}


import lombok.*;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
class B {

}

Класс A компилируется правильно, но класс B сообщает о проблеме выше.

Я попытался заменить версию JAR Lombok, но хотя я установил версию на последнюю, это не нормально.

Итак, я попытался импортировать Lombok для каждого класса, на который я ссылаюсь.

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
class B {

}

Оно работает! Кажется, ошибка.