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?

user1991839
źródło
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
Alexander Zagniotov
źródło
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?

Ryan Stewart
źródło
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

Tim Long
źródło
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
16

2019:

Pobierz wtyczkę i jesteś posortowany ...

Plik> Ustawienia> Wtyczki

wprowadź opis obrazu tutaj

Witold Kaczurba
źródło
1
Nazwa: Wtyczka Lombok
Ismail Yavuz
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

Etenyl
źródło
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'
}
S34N
źródło
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.

f120146
źródło
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ć.

mefor sy
źródło
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

Meena Chaudhary
źródło
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

Sumukh Bhandarkar
źródło
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.

Amrit Kr Lama
źródło
2

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

cecile
źródł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

AlexPes
źródło
1

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

John Chapman
źródło
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!");
  }
}
Corwin Newall
źródło
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>
albertoiNET
źródło
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”

Kristjan Peil
źródło
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

Radu Ciobanu
źródło
0

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

Rajiv Singh
źródło
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.

Kirill G.
źródło
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.

Shylendra Madda
źródło
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ął.

yinhaomin
źródło
0

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

Przykład: lombok.log.fieldName = LOG

Taras Melnyk
źródło