Я подозреваю, что это вводящее в заблуждение сообщение об ошибке вследствие того, что Lombok подключается во время компиляции.
В байт-коде нет понятия импорта. Классы заменяются их полностью определенными именами (например, от Integer
до java.lang.Integer
). Поэтому в какой-то момент компиляции импорт анализируется, применяется, и любые неизвестные классы (например, из-за отсутствия правильной зависимости) на этом этапе выдают ошибку.
Поскольку @Slf4j
означает, что вы не необходимо импортировать org.slf4j.Logger
, описанный выше шаг пропущен для этого класса.
После того, как Lombok добавил поле log
, компилятор должен впоследствии посмотреть на его использование, см. класс org.slf4j.Logger
, который он не распознает и выдает ошибку. При нормальных обстоятельствах, из-за более ранней стадии компиляции, единственная возможная причина состоит в том, что поле не существует, поэтому следует, что символ log
должен отсутствовать. То, что он действительно не может понять, это тип поля log
.
Поскольку Lombok вносит изменения в середине компиляции, я предполагаю, что ложные ошибки, такие как, всегда возможны , Возможно, разработчики Lombok могли бы исправить это, выполнив собственную проверку на org.slf4j.Logger
. Большая часть функциональности, предоставляемой Lombok, не включает «импорт» внешних классов, поэтому я не удивлен, что он не обрабатывает этот крайний случай настолько элегантно, насколько это возможно.
Если вы добавите зависимость для SLF4J, компилятор больше не будет жаловаться.