Сборка с использованием Lombok's @ Slf4j и Intellij: не удается найти журнал символов

113

У меня есть проект maven, который без проблем строится из командной строки. Однако, когда я создаю его с помощью IntelliJ, я получаю сообщение об ошибке:

java: FileName.java:89: cannot find symbol
symbol  : variable log

В java-файле нет журнала, определенного или импортированного, но есть

@Slf4j
final public class FileName {

оператор перед телом класса, который должен определять класс журнала.

В окне структуры проекта классы для:

Maven: org.slf4j:jcl-over-slf4j:1.6.1
Maven: org.slf4j:slf4j-api:1.6.6
Maven: org.slf4j:slf4j-log4j12:1.6.6
Maven: org.slf4j:slf4j-simple:1.6.6

перечислены в разделе «Библиотеки» и обозначены как загруженные и доступные.

Любая идея, почему это будет строиться с помощью maven через командную строку, но не через IntelliJ, и как решить проблему?

user1991839
источник
5
При такой же проблеме помогла переустановка плагина Lombok.
Alex Shumilov

Ответы:

170

Помимо установки плагина Lombok , также убедитесь, что Enable annotation processingфлажок " " установлен под:

Preferences > Compiler > Annotation Processors

Примечание. Начиная с IntelliJ 2017, Enable Annotation Processingфлажок " " перемещен на:

Settings > Build, Execution, Deployment > Compiler > Annotation Processors
Александр Загниотов
источник
1
У меня не включена обработка аннотаций и работает: | У меня установлен плагин lombok.
Бен Джордж
Я установил плагин, и он работал без изменения этого параметра. Однако я решил поменять его на всякий случай.
sheldonkreger
6
При использовании плагинов IntelliJ 2017.2 и Lombok 0.14.16 необходимо было установить «Включить обработку аннотаций», и этот флажок находится в разделе «Настройки» -> «Сборка, выполнение, развертывание» -> «Компилятор» -> «Обработчики аннотаций».
Ниеми
1
IntelliJ 2018.2, установлен плагин lombok 1.14. Мне все еще пришлось включить обработку аннотаций в IntelliJ. Файл-> Настройки-> Сборка, Выполнение, Развертывание-> Компилятор-> Процессоры аннотаций. На самом деле IntelliJ не приносит мне очков.
demaniak
32

Предположительно, это аннотация Lombok @ Slf4j, которую вы используете. Вам потребуется установить плагин Lombok в IntelliJ, если вы хотите, чтобы IntelliJ распознавал аннотации Lombok. В противном случае, чего вы ожидаете, если попытаетесь использовать несуществующее поле?

Райан Стюарт
источник
1
У меня установлен плагин Lombok. Похоже, что вариантов конфигурации не так много. Возможно, это ошибка в плагине?
user1991839
1
Я успешно использовал его с IDEA 11 и 12. Иногда кажется, что что-то «забывает» о Lombok, и я получаю кучу красных строк в исходном коде, но он все еще строится для меня. Однако он приходит и уходит, так что плагин определенно не без ошибок.
Райан Стюарт,
Вы знаете, есть ли обходной путь, чтобы обойти это? Как, возможно, сообщить IntelliJ о библиотеках Lombok, не используя плагин? Я пытаюсь использовать IntelliJ для отладки тестов, и из-за этого мне сложно использовать его для этого
user1991839,
Извините, я не могу вам помочь. Я еще не очень много использовал Ломбок. Я только что пробовал это в нескольких местах. Я бы посмотрел на страницу проекта плагина , но у меня такое чувство, что вокруг него пока нет большого сообщества.
Райан Стюарт,
24

В Intellij версии 2016, 2017 включить Preferences -> Compiler -> Annotation Processors у меня не работает!

Помогает следующий дополнительный флажок: введите описание изображения здесь

Тим Лонг
источник
1
Я добавил плагин и включил обработчики аннотаций, но все равно не повезло. Можете ли вы указать, как получить доступ к вышеуказанному флажку?
Филип Джон
@PhilipJohn: В поле поиска настроек введите «Lombok»?
Тим Лонг,
на самом деле нам также нужно добавить зависимость "org.slf4j"
Василий Саржинский
16

2019:

Получите плагин и все готово ...

Файл> Настройки> Плагины

введите описание изображения здесь

Витольд Качурба
источник
1
Название: Плагин Lombok
Исмаил Явуз
10

Возможно, я открою мертвую тему, но простое решение - проверить ваши зависимости (например, Maven pom), если вы включаете logback-core и logback-classic .

Slf4j - это просто интерфейс, для работы вам нужна конкретная реализация.

Меня дважды обманули, когда IDEA все испортила, теперь я готов: D

Этенил
источник
8

Сработало у меня !!! Это не помогло на CircleCI и на Jenkins.

Если вы являетесь пользователем Gradle, попробуйте добавить в свои зависимости следующее:

dependencies {
    //Other Dependencies >>

    //LOMBOK Dependencies
    annotationProcessor 'org.projectlombok:lombok'
    compileOnly 'org.projectlombok:lombok'
    testAnnotationProcessor 'org.projectlombok:lombok'
    testCompileOnly 'org.projectlombok:lombok'
}
S34N
источник
Последние 3 пункта - это то, что мне нужно было добавить при использовании Gradle. Для предыдущего проекта я уже позаботился о плагине Lombok и флажке обработчика аннотаций для предыдущего проекта, для которого мы использовали Maven. Я столкнулся с этой ошибкой после использования IntelliJ для создания проекта Spring Boot с выбранным Lombok; он включал строки compileOnly и annotationProcessor, но не строки test *.
Xenson
4

В IDEA 13 это больше не проблема, вам просто нужно установить плагин Lombok.

f120146
источник
4

Я только что установил последнюю версию идеи 2108.1 и обнаружил эту проблему, после установки плагина lombok и перезапуска Idea ее разрешите.

я для си
источник
4

Если вы используете maven, попробуйте добавить путь Lombok в maven-compiler-pluginсписок обработчиков аннотаций, как показано ниже.

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>1.3.0.Final</version>
                    </path>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>1.18.10</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>

Измените версию в соответствии с вашей версией Lombok. Помимо этого, убедитесь, что вы выполнили следующие

  • установил плагин Lombok для Intellij.
  • Включена обработка аннотаций для вашего проекта под File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor. У меня и то, Obtain processors from project classpathи другое Processor pathработает. Поэтому не уверен, что подойдет вам, но попробуйте то, что работает.

И вместо того, чтобы снимать в темноте часами. Может помочь небольшое прочтение того, как работают процессоры аннотаций и используются компилятором. так что читайте ниже.

http://hannesdorfmann.com/annotation-processing/annotationprocessing101

Мина Чаудхари
источник
Это единственное решение, которое у меня сработало!
Cheemcheem
2

Это сработало для меня: File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor

Установите флажок «Включить обработку аннотаций». Apply

близко

Sumukh Bhandarkar
источник
2

Я попробовал почти все упомянутые ответы, но у меня ничего не помогло. Моя сборка gradle каждый раз терпела неудачу. Только что нашел это решение:

Добавьте annotationProcessor 'org.projectlombok:lombok' свой build.gradle.

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

Амрит Кр Лама
источник
2

Удаление аннотации @ Slf4J из класса с последующим повторным добавлением сработало для меня.

Сесиль
источник
2

1 Мои зависимости от gradle lombok:

implementation 'org.projectlombok:lombok:1.18.10'
annotationProcessor 'org.projectlombok:lombok:1.18.10'

2 После включения «Аннотации ...» в IDEA (Настройки), с учетом того, что вы установили плагин Lombok, я решил ту же проблему.

AlexPes
источник
1

Я видел эту проблему со старой версией Lombok при компиляции под JDK8. Вернув проект к JDK7, проблема исчезла.

Джон Чепмен
источник
Обновление зависимости lombok в pom тоже работает :)
Christophe Moine
1

Это не будет проблемой OP, но для всех, кто пробует все безуспешно:

У меня были похожие симптомы. Когда бы я ни строил после a mvn clean, он не находил log, ни getXYZ(), ни builder(), ни чего.

[ERROR]   symbol:   variable log
[ERROR]   location: class com.example.MyClass
[ERROR] /Path/To/Some/Java/src/main/com/example/MyClass.java:[30,38] cannot find symbol
[ERROR]   symbol:   method builder()
[ERROR]   location: class com.example.MyClass

Прочитав все ответы, которые я мог найти о проблемах QueryDSL / JPA / Hibernate / Lombok / IntelliJ / Maven безрезультатно, я понял, что виноват один статический импорт @Getterметода, который был аннотирован в статическом поле .

Весна 1.15.14.RELEASE, Intellij 2019.1.1

@SpringBootApplication
public class BarApplication implements ApplicationContextAware {
  @Getter
  private static ApplicationContext applicationContext;

  // ... start Spring application, and grab hold of ApplicationContext as it comes past
}
import ...
import static BarApplication.getApplicationContext;

@Slf4j
public class IMakeItAllFail {
   public IMakeItAllFail() {
      log.info("{}", getApplicationContext());
   }
}
@Slf4j
public class Foo {
  Foo() {
    log.info("I fail to compile but I have nothing to do with the other classes!");
  }
}
Корвин Ньюолл
источник
1

Это не проблема IntelliJ. Если вы попробуете под консолью, запустите mvn install , тоже ломается. Все аннотации из lombok.extern требовали добавления зависимостей. Этот пакет группирует следующие аннотации:

  • CommonsLog
  • Флоггер
  • Журнал
  • JBossLog
  • Журнал4
  • Log4j2
  • Slf4j
  • XSlf4j

Например, для Slf4j необходимо добавить эту зависимость в ваш pom.xml

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${slf4j.version}</version>
</dependency>
albertoiNET
источник
0

После включения процессоров аннотаций и установки плагина lombok он по-прежнему не работал. Мы обошли это, проверив опцию Idea «Делегировать сборку IDE в gradle».

Кристьян Пейл
источник
0

Что помогло мне, так это установка флажка «Использовать реестр плагинов» в настройках Maven.

Путь: File -> Preferences -> Build, Execution, Deployment -> Build Tools -> Maven

Раду Чобану
источник
0

Удалите папку .idea и файлы .iml в каждом модуле и перестройте решение.

Раджив Сингх
источник
0

У меня был плагин Lombok, включены аннотации, он компилировался из командной строки - все, и он все еще не видел мой проект как maven (все зависимости maven были красными в исходных файлах). Затем я дважды щелкнул SHIFT и поискал «maven», и среди результатов был «Перезагрузить все проекты Maven». После запуска появилась вкладка Maven, и я смог скомпилировать, и все красные подчеркивания в исходном коде исчезли.

Кирилл Г.
источник
0

Простая вещь, но я понял, что это: я пропустил добавление @Logв класс.

@Log
public class YourClassName {


}

Это может кому-то помочь.

Шилендра Мадда
источник
0

У меня такая же проблема; Я использую gradle и IDEA;

Оказывается, это вызвано неправильной версией gradle.

В gradle \ wrapper \ gradle-wrapper.properties это:

distributionUrl=https\://services.gradle.org/distributions/gradle-4.8-bin.zip

Однако я указал версию в IDEA как

D:\Library\gradle-5.2.1

После снижения версии gradle до 4.10.x проблема исчезла.

Иньхаомин
источник
0

Попробуйте создать lombok.configфайл в базовом каталоге проекта и укажите lombok.log.fieldNameзначение.

Пример: lombok.log.fieldName = LOG

Тарас Мельник
источник