Ответ 1
Я понизил lombok до 1.14.8, эта версия работает с maven build, я не нашел, почему 1.16 verson не работает:(
Я использую проект 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
Я понизил lombok до 1.14.8, эта версия работает с maven build, я не нашел, почему 1.16 verson не работает:(
Была ли та же проблема с использованием 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>
Надеюсь, что это поможет
Я действительно смог решить эту проблему, следуя ответу, размещенному здесь:
MapStruct и Lombok не работают вместе
В основном мне пришлось добавить lombok
в maven-compiler-plugin
<annotationProcessorPaths>
Короче говоря, обновите 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
, поэтому он снова работает.
Если вы используете статические методы, связанные с 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
Моим решением было префикс аннотации с именем пакета lombok.
@lombok.Builder
@lombok.experimental.Accessors(prefix = "m", chain = true)
а не
@Builder
@Accessors(prefix = "m", chain = true)
Если вы используете аннотации lombok в статических классах, в этом случае вам нужно будет указать полное имя класса ie. вместо @Data
до @lombok.Data
. Это сработало для меня.
Может быть, вы указали -proc:none
или явно указанные обработчики аннотаций, используя -processor <processorclass>
в вашей java-компиляции (javac)?
В моем случае это было решено путем обновления JDK (было 1.8.0_66, теперь 1.8.0_92)
попробуйте указать параметр для модуля "ломбок" в зависимостях. Я столкнулся с той же проблемой и разрешил это с помощью этой работы.
Я не знаю, но по какой-то причине это решает мою проблему.
У меня есть два класса, которые используют @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 {
}
Оно работает! Кажется, ошибка.