Сборка с использованием 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, и как решить проблему?


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"
Василий Саржинский


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'
}

Последние 3 пункта - это то, что мне нужно было добавить при использовании Gradle. Для предыдущего проекта я уже позаботился о плагине Lombok и флажке обработчика аннотаций для предыдущего проекта, для которого мы использовали Maven. Я столкнулся с этой ошибкой после использования IntelliJ для создания проекта Spring Boot с выбранным Lombok; он включал строки compileOnly и annotationProcessor, но не строки test *.
Xenson

4

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


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

близко


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, я решил ту же проблему.


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>

0

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


0

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

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



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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.