Побудова за допомогою Lombok @ 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.
Олексій Шумілов

Відповіді:


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 зі мною не дуже виграє бали.
деманяк

32

Імовірно, це анотація Lombok @ Slf4j, яку ви використовуєте. Вам потрібно буде встановити плагін Lombok в IntelliJ, якщо ви хочете, щоб IntelliJ розпізнавав примітки щодо Lombok. В іншому випадку, що ви очікуєте, якщо спробуєте використовувати поле, яке не існує?


1
У мене встановлений плагін Lombok. Здається, не дуже багато з точки зору параметрів конфігурації. Можливо, це помилка в плагіні?
користувач1991839

1
Я успішно використовував це з IDEA 11 та 12. Іноді щось здається, що "забуває" про Ломбок, і я отримую купу червоних ліній у вихідному коді, але він все ще створює для мене. Хоча він і йде, тому плагін, безумовно, не є помилкою.
Райан Стюарт

Чи знаєте ви, чи існує рішення, яке можна подолати? Як, можливо, повідомити IntelliJ про бібліотеки Lombok, не переходячи через плагін? Я намагаюся використовувати IntelliJ для налагодження тестів, і це ускладнює мені його для цього
user1991839

Вибачте, не можу вам там допомогти. Я ще не дуже використовував Ломбок. Я просто спробував це в кількох місцях. Я б перевірив сторінку проекту плагіна , але я відчуваю, що навколо нього ще не дуже велике співтовариство.
Райан Стюарт

24

У версії Intellij 2016, 2017 увімкніть Налаштування -> Компілятор -> Процесори анотацій не працюють для мене!

Наступний додатковий прапорець допомагає: введіть тут опис зображення


1
Я додав плагін і включив процесори анотацій, досі не пощастило. Чи можете ви вказати, як отримати доступ до вищевказаного прапорця?
Філіп Джон

@PhilipJohn: У полі пошуку "Налаштування" введіть "Ломбок"?
Тім Лонг

насправді нам також потрібно додати залежність "org.slf4j"
Василь Саржинський


10

Я міг би бути ungraving мертвої теми , але просте рішення, щоб перевірити в своїх залежності (POM Maven для Exemple) , якщо ви в тому числі Logback-ядра і Logback-класики .

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

Мене двічі обманювали, коли IDEA псує це, тепер мені добре: D


7

Працювали для мене !!! Це було невдало і в CircleCI, і в Дженкінсі.

Якщо ви користувач Gradle, спробуйте додати наступне у свої залежності:

dependencies {
    //Other Dependencies >>

    //LOMBOK Dependencies
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testAnnotationProcessor 'org.projectlombok:lombok'
    testCompile 'org.projectlombok:lombok'
    testImplementation 'org.projectlombok:lombok'
}

Останні 3 пункти - це те, що мені потрібно було додати під час використання Gradle. Для попереднього проекту я вже подбав про плагін Lombok та прапорець процесора анотацій для попереднього проекту, для якого ми використовували Maven. Я зіткнувся з цією помилкою після використання IntelliJ для створення проекту Spring Boot з обраним Lombok; вона включала рядки compileOnly та annotationProcessor, але не тестові рядки *.
Ксенсон

4

У IDEA 13 це, здається, більше не є проблемою, вам просто потрібно встановити плагін Lombok.


4

Щойно я встановив останню версію ідеї 2108.1 і виявив цю проблему, після встановлення плагіну lombok та перезапуску ідеї вирішити.


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 Моя залежність від лембока:

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

2 Після ввімкнення "Анотації ..." в IDEA ("Налаштування"), беручи до уваги, що ви встановили плагін Lombok, це вирішило мою ж проблему


1

Під час компіляції під JDK8 я бачив цю проблему зі старішою версією Lombok. Повернення проекту до JDK7 усунуло проблему.


Модернізація залежності ломбока в пом також працює :)
Крістоф Мойн

1

Це не було б проблемою ОП, але для тих, хто все намагається успішно:

У мене були подібні симптоми. Кожного разу, коли я будував після 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.РЕЛІЗАЦІЯ, 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
  • Log4
  • Log4j2
  • Slf4j
  • XSlf4j

Наприклад, для Slf4j необхідно додати цю залежність до вашого pom.xml

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${slf4j.version}</version>
</dependency>

0

Після ввімкнення процесорів анотацій та встановлення плагіна lombok він все ще не працював. Ми працювали над цим, перевіряючи варіант Ідеї "Делегувати IDE, будувати до gradle"


0

Що для мене розібралось, це встановити прапорець "Використовувати реєстр плагінів" у налаштуваннях Maven.

Шлях: Файл -> Налаштування -> Збірка, Виконання, Розгортання -> Інструменти побудови -> 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.