Budowanie z Lombok's @ Slf4j i Intellij: Nie można znaleźć dziennika symboli


113

Mam projekt Maven, który buduje się bez problemów z wiersza poleceń. Jednak kiedy buduję go z IntelliJ, pojawia się błąd:

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

W pliku java nie ma zdefiniowanego ani zaimportowanego dziennika, ale istnieje plik

@Slf4j
final public class FileName {

instrukcja przed treścią klasy, która powinna definiować klasę dziennika.

W oknie struktury projektu klasy dla:

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

są wymienione w bibliotekach i oznaczone jako pobrane i dostępne.

Masz jakiś pomysł, dlaczego miałoby to zostać zbudowane z maven za pomocą wiersza poleceń, ale nie przez IntelliJ i jak rozwiązać problem?


5
Mając ten sam problem, pomogła ponowna instalacja wtyczki Lombok.
Alex Shumilov

Odpowiedzi:


170

Oprócz zainstalowania wtyczki Lombok upewnij się, że pole Enable annotation processingwyboru „ ” jest zaznaczone pod:

Preferences > Compiler > Annotation Processors

Uwaga: począwszy od IntelliJ 2017, pole Enable Annotation Processingwyboru „ ” zostało przeniesione do:

Settings > Build, Execution, Deployment > Compiler > Annotation Processors

1
Nie mam włączonego przetwarzania adnotacji i działa: | Mam zainstalowaną wtyczkę lombok.
Ben George,

Zainstalowałem wtyczkę i działało bez zmiany tego ustawienia. Postanowiłem jednak to zmienić na dobre.
sheldonkreger

6
Korzystając z wtyczek IntelliJ 2017.2 i Lombok 0.14.16, konieczne było ustawienie „Włącz przetwarzanie adnotacji”, a pole wyboru znajduje się w obszarze Preferencje -> Kompilacja, wykonanie, wdrażanie -> Kompilator -> Procesory adnotacji.
Niemi

1
IntelliJ 2018.2, zainstalowana wtyczka lombok 1.14. Nadal musiałem włączyć przetwarzanie adnotacji w IntelliJ. Plik-> Ustawienia-> Kompilacja, wykonanie, wdrożenie-> Kompilator-> Procesory adnotacji. IntelliJ tak naprawdę nie wygrywa ze mną punktów.
demaniak

32

Przypuszczalnie jest to adnotacja Lombok @ Slf4j , której używasz. Musisz zainstalować wtyczkę Lombok w IntelliJ, jeśli chcesz, aby IntelliJ rozpoznawał adnotacje Lombok. W przeciwnym razie czego się spodziewasz, jeśli spróbujesz użyć pola, które nie istnieje?


1
Mam zainstalowaną wtyczkę Lombok. Wygląda na to, że nie ma zbyt wiele opcji konfiguracyjnych. Może to błąd we wtyczce?
user1991839

1
Użyłem go z powodzeniem z IDEA 11 i 12. Czasami wydaje się, że coś „zapomina” o Lombok i dostaję kilka czerwonych linii w kodzie źródłowym, ale nadal się buduje. Pojawia się i znika, więc wtyczka zdecydowanie nie jest wolna od błędów.
Ryan Stewart,

Czy wiesz, czy istnieje obejście tego problemu? Na przykład poinformowanie IntelliJ o bibliotekach Lombok bez przechodzenia przez wtyczkę? Próbuję używać IntelliJ do debugowania testów i utrudnia mi to używanie go do tego celu
user1991839,

Przepraszam, nie mogę ci tam pomóc. Nie używałem jeszcze zbyt często Lombok. Właśnie go wypróbowałem w kilku miejscach. Sprawdziłbym stronę projektu wtyczki , ale mam wrażenie, że wokół niej nie ma jeszcze bardzo dużej społeczności.
Ryan Stewart,

24

W wersji Intellij 2016, 2017 włącz Preferencje -> Kompilator -> Procesory adnotacji nie działają dla mnie!

Pomocne jest następujące dodatkowe pole wyboru: wprowadź opis obrazu tutaj


1
Dodałem wtyczkę i włączyłem procesory adnotacji, nadal nie mam szczęścia. Czy możesz podać, jak uzyskać dostęp do powyższego pola wyboru?
Philip John

@PhilipJohn: W polu wyszukiwania Preferencje wpisz „Lombok”?
Tim Long

właściwie musimy też dodać zależność „org.slf4j”
Vasyl Sarzhynskyi


10

Być może nie chcę martwić się martwym tematem, ale prostym rozwiązaniem jest sprawdzenie twoich zależności (na przykład pom Mavena), jeśli używasz logback-core i logback-classic .

Slf4j to tylko interfejs, do działania potrzebujesz konkretnej implementacji.

Dwa razy zostałem oszukany przez IDEA, która to zepsuła, teraz jestem gotowy: D


8

Pracował dla mnie !!! Nie udało się również na CircleCI i Jenkins.

Jeśli jesteś użytkownikiem Gradle, spróbuj dodać następujące elementy do swoich zależności:

dependencies {
    //Other Dependencies >>

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

Ostatnie 3 elementy są tym, co musiałem dodać podczas korzystania z Gradle. W poprzednim projekcie zajmowałem się już wtyczką Lombok i polem wyboru procesora adnotacji dla poprzedniego projektu, w którym używaliśmy Mavena. Napotkałem ten błąd po użyciu IntelliJ do utworzenia projektu Spring Boot z wybranym Lombok; zawierał linie compileOnly i annotationProcessor, ale nie zawierał linii test *.
Xenson

4

W IDEA 13 wydaje się, że nie stanowi to już problemu, wystarczy zainstalować wtyczkę Lombok.


4

Właśnie zainstalowałem najnowszą wersję pomysłu 2108.1 i znalazłem ten problem, po zainstalowaniu wtyczki lombok i ponownym uruchomieniu Pomysłu, aby go rozwiązać.


4

Jeśli używasz mavena, spróbuj dodać ścieżkę Lombok do maven-compiler-pluginlisty procesorów adnotacji, jak pokazano poniżej.

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

Zmień wersję zgodnie ze swoją wersją Lombok. Poza tym upewnij się, że wykonałeś następujące czynności

  • zainstalował wtyczkę Lombok dla Intellij.
  • Włączono przetwarzanie adnotacji w Twoim projekcie w ramach File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor. Dla mnie jedno Obtain processors from project classpathi drugie, i Processor pathdziała. Nie jesteś więc pewien, co zadziała w Twoim przypadku, ale spróbuj tego, co działa.

I zamiast godzinami fotografować w ciemności. Przeczytaj trochę, jak działają procesory adnotacji i jak są używane przez kompilator. więc przeczytaj poniżej.

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


To jedyne rozwiązanie, które u mnie zadziałało!
cheemcheem

2

To zadziałało dla mnie: File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor

Zaznacz opcję „Włącz przetwarzanie adnotacji”. Apply

Blisko


2

Wypróbowałem prawie wszystkie wymienione odpowiedzi, ale nic mi nie pomogło. Moja kompilacja klasy za każdym razem zawodziła. Właśnie znalazłem to rozwiązanie:

Dodaj annotationProcessor 'org.projectlombok:lombok' plik build.gradle.

To zadziałało dla mnie.


2

Usunięcie adnotacji @ Slf4J z klasy, a następnie ponowne dodanie jej działało.


2

1 Moje zależne od Gradle Lombok:

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

2 Po włączeniu "Adnotacji ..." w IDEA (Ustawieniach), biorąc pod uwagę, że masz zainstalowaną wtyczkę Lombok, to rozwiązało mój ten sam problem


1

Widziałem ten problem ze starszą wersją Lombok podczas kompilacji pod JDK8. Ustawienie projektu z powrotem na JDK7 sprawiło, że problem zniknął.


Ulepszenie zależności lomboka w pom również działa :)
Christophe Moine

1

To nie byłby problem OP, ale dla każdego, kto próbuje wszystkiego bez powodzenia:

Miałem podobne objawy. Ilekroć zbudowany po mvn clean, to nie znajdzie log, albo getXYZ(), lub builder(), lub cokolwiek.

[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

Po przeczytaniu każdej odpowiedzi, jaką udało mi się znaleźć na temat problemów QueryDSL / JPA / Hibernate / Lombok / IntelliJ / Maven, ale bezskutecznie, doszedłem do wniosku, że winowajcą był pojedynczy statyczny import @Gettermetody, która została opisana na statycznym polu .

Wiosna 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

To nie jest problem IntelliJ. Jeśli spróbujesz pod konsolą, uruchom mvn install , również się zepsuje. Wszystkie adnotacje z lombok.extern wymagały dodania zależności. Ten pakiet grupuje kolejne adnotacje:

  • CommonsLog
  • Flogger
  • Log
  • JBossLog
  • Log4
  • Log4j2
  • Slf4j
  • XSlf4j

Na przykład dla Slf4j konieczne jest dodanie tej zależności do pom.xml

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

0

Po włączeniu procesorów adnotacji i zainstalowaniu wtyczki lombok nadal nie działało. Obejrzeliśmy to, zaznaczając opcję Pomysłu „Deleguj kompilację IDE do oceny”


0

Rozwiązaniem dla mnie było zaznaczenie pola wyboru „Użyj rejestru wtyczek” w ustawieniach Mavena.

Ścieżka to: Plik -> Preferencje -> Kompilacja, wykonanie, wdrażanie -> Narzędzia kompilacji -> Maven


0

Usuń folder .idea i pliki .iml w każdym module i ponownie skompiluj rozwiązanie.


0

Miałem wtyczkę Lombok, włączone adnotacje, kompilował się z linii poleceń - wszystko i nadal nie widział mojego projektu jako mavena (wszystkie zależności mavena były czerwone w plikach źródłowych). Następnie dwukrotnie kliknąłem SHIFT i wyszukałem „maven”, a wśród wyników było „Reload all Maven Projects”. Po jej uruchomieniu pojawiła się zakładka Maven i udało mi się skompilować, a wszelkie czerwone podkreślenia w kodzie źródłowym zniknęły.


0

Prosta rzecz, ale doszedłem do wniosku, że: brakowało mi dodawania @Logdo zajęć.

@Log
public class YourClassName {


}

To może komuś pomóc.


0

Mam ten sam problem; Używam gradle i IDEA;

Okazuje się, że jest to spowodowane złą wersją gradle.

W gradle \ wrapper \ gradle-wrapper.properties jest to:

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

Jednak podałem wersję w IDEA

D:\Library\gradle-5.2.1

Po obniżeniu wersji Gradle do 4.10.x problem zniknął.


0

Spróbuj utworzyć lombok.configplik w katalogu podstawowym projektu i podaj lombok.log.fieldNamewartość.

Przykład: lombok.log.fieldName = LOG

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.