Bangunan dengan @ Slf4j dan Intellij Lombok: Tidak dapat menemukan log simbol

113

Saya memiliki proyek maven yang dibangun tanpa masalah dari baris perintah. Namun, saat saya membangunnya dengan IntelliJ, saya mendapatkan error:

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

Tidak ada log yang ditentukan atau diimpor dalam file java, tetapi ada

@Slf4j
final public class FileName {

pernyataan sebelum badan kelas yang harus mendefinisikan kelas log.

Di jendela struktur proyek, kelas untuk:

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

terdaftar di bawah perpustakaan dan diindikasikan sebagai telah diunduh dan tersedia.

Adakah ide mengapa ini akan dibangun dengan maven melalui baris perintah, tetapi tidak melalui IntelliJ dan bagaimana menyelesaikan masalah?

pengguna1991839
sumber
5
Memiliki masalah yang sama, menginstal ulang Lombok Plugin membantu.
Alex Shumilov

Jawaban:

170

Selain memasang plugin Lombok , pastikan juga bahwa Enable annotation processingkotak centang " " dicentang di bawah:

Preferences > Compiler > Annotation Processors

Catatan: dimulai dengan IntelliJ 2017, Enable Annotation Processingkotak centang " " telah dipindahkan ke:

Settings > Build, Execution, Deployment > Compiler > Annotation Processors
Alexander Zagniotov
sumber
1
Saya belum mengaktifkan pemrosesan anotasi dan berfungsi: | Saya memiliki plugin lombok yang terpasang.
Ben George
Saya menginstal plugin dan berfungsi tanpa mengubah pengaturan ini. Namun, saya memutuskan untuk mengubahnya demi kebaikan.
sheldonkreger
6
Menggunakan plugin IntelliJ 2017.2 dan Lombok 0.14.16, pengaturan "Aktifkan pemrosesan anotasi" diperlukan dan kotak centang ada di Preferensi -> Bangun, Eksekusi, Penyebaran -> Kompilator -> Prosesor Anotasi.
Niemi
1
IntelliJ 2018.2, plugin lombok diinstal 1.14. Saya masih harus mengaktifkan pemrosesan anotasi di IntelliJ. File-> Pengaturan-> Build, Execution, Deployment-> Compiler-> Annotation Processors. IntelliJ tidak benar-benar memenangkan poin dengan saya.
demaniak
32

Agaknya, itulah penjelasan Lombok @ Slf4j yang Anda gunakan. Anda harus menginstal plugin Lombok di IntelliJ jika Anda ingin IntelliJ mengenali anotasi Lombok. Jika tidak, apa yang Anda harapkan jika mencoba menggunakan bidang yang tidak ada?

Ryan Stewart
sumber
1
Saya telah menginstal plugin Lombok. Tampaknya tidak banyak dalam hal opsi konfigurasi. Mungkinkah itu bug di plugin?
pengguna1991839
1
Saya telah berhasil menggunakannya dengan IDEA 11 dan 12. Kadang-kadang, sesuatu tampaknya "melupakan" Lombok, dan saya mendapatkan banyak garis merah di kode sumbernya, tetapi kode itu masih dibuat untuk saya. Itu datang dan pergi, jadi plugin ini jelas tidak bebas bug.
Ryan Stewart
Apakah Anda tahu jika ada solusi untuk melewati ini? Seperti mungkin memberi tahu IntelliJ tentang perpustakaan Lombok tanpa melalui plugin? Saya mencoba menggunakan IntelliJ untuk debugging tes dan ini membuat saya sulit menggunakannya untuk itu
user1991839
Maaf, tidak dapat membantu Anda di sana. Saya belum banyak menggunakan Lombok. Saya baru saja mencobanya di beberapa tempat. Saya akan memeriksa halaman proyek plugin , tetapi saya merasa belum ada komunitas yang sangat besar di sekitarnya.
Ryan Stewart
24

Di Intellij versi 2016, 2017, aktifkan Preferensi -> Kompiler -> Prosesor Anotasi tidak berfungsi untuk saya!

Kotak centang tambahan berikut membantu: masukkan deskripsi gambar di sini

Tim Long
sumber
1
Saya menambahkan plugin dan mengaktifkan Prosesor Anotasi, masih belum berhasil. Dapatkah Anda memberikan cara mengakses kotak centang di atas?
Philip John
@PhilipJohn: Di kotak pencarian Preferensi, ketik "Lombok"?
Tim Long
sebenarnya kita juga perlu menambahkan ketergantungan "org.slf4j"
Vasyl Sarzhynskyi
16

2019:

Dapatkan plugin dan Anda diurutkan ...

File> Pengaturan> Plugin

masukkan deskripsi gambar di sini

Witold Kaczurba
sumber
1
Nama: Plugin Lombok
Ismail Yavuz
10

Saya mungkin membatalkan topik yang sudah mati tetapi solusi sederhana adalah memeriksa dependensi Anda (misalnya pom Maven) jika Anda menyertakan logback-core dan logback-classic .

Slf4j hanyalah antarmuka, Anda memerlukan implementasi konkret di belakangnya agar berfungsi.

Saya telah ditipu dua kali dengan IDEA yang mengacaukannya, sekarang saya siap melakukannya: D

Etenil
sumber
7

Bekerja untuk saya !!! Itu gagal di CircleCI & di Jenkins juga.

Jika Anda Pengguna Gradle, coba tambahkan berikut ini ke dalam dependensi Anda:

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'
}
S34N
sumber
3 item terakhir adalah yang perlu saya tambahkan saat menggunakan Gradle. Untuk proyek sebelumnya, saya sudah menangani plugin Lombok, dan kotak centang prosesor anotasi untuk proyek sebelumnya yang kami gunakan Maven. Saya mengalami kesalahan ini setelah menggunakan IntelliJ untuk membuat proyek Spring Boot dengan Lombok dipilih; itu menyertakan baris compileOnly, dan annotationProcessor, tetapi bukan baris * pengujian.
Xenson
4

Di IDEA 13 ini sepertinya tidak lagi menjadi masalah, Anda hanya perlu menginstal plugin Lombok.

f120146
sumber
4

Saya baru saja menginstal versi ide terbaru 2108.1 dan menemukan masalah ini, setelah menginstal plugin lombok dan memulai ulang Ide mengatasinya.

saya untuk sy
sumber
4

Jika Anda menggunakan maven, coba tambahkan jalur Lombok ke maven-compiler-plugindaftar pemroses anotasi seperti yang ditunjukkan di bawah ini.

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

Ubah versi sesuai versi Lombok Anda. Selain itu pastikan Anda telah melakukan hal berikut

  • menginstal plugin Lombok untuk Intellij.
  • Pemrosesan anotasi diaktifkan untuk proyek Anda di bawah File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor. Bagi saya keduanya, Obtain processors from project classpathdan Processor pathsedang bekerja. Jadi tidak yakin apa yang akan berhasil untuk Anda, tetapi coba mana yang berhasil.

Dan daripada memotret dalam kegelapan selama berjam-jam. Membaca sedikit bagaimana prosesor anotasi bekerja dan digunakan oleh compiler dapat membantu. sekian baca di bawah ini.

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

Meena Chaudhary
sumber
Ini adalah satu-satunya solusi yang berhasil untuk saya!
cheemcheem
2

Ini berhasil untuk saya: File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor

Centang pada 'aktifkan pemrosesan anotasi'. Apply

Menutup

Sumukh Bhandarkar
sumber
2

Saya mencoba hampir semua jawaban yang disebutkan tetapi tidak ada yang berhasil untuk saya. Bangunan gradle saya selalu gagal. Baru saja menemukan solusi ini:

Tambahkan annotationProcessor 'org.projectlombok:lombok' build.gradle Anda.

Ini berhasil untuk saya.

Amrit Kr Lama
sumber
2

Menghapus anotasi @ Slf4J dari kelas dan kemudian menambahkannya kembali berhasil untuk saya.

cecile
sumber
2

1 Ketergantungan gradle lombok saya:

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

2 Setelah mengaktifkan "Anotasi ..." di IDEA (Pengaturan), dengan mempertimbangkan bahwa Anda telah menginstal plugin Lombok, itu menyelesaikan masalah saya yang sama

AlexPes
sumber
1

Saya melihat masalah ini dengan versi Lombok yang lebih lama saat melakukan kompilasi dengan JDK8. Mengatur proyek kembali ke JDK7 membuat masalah hilang.

John Chapman
sumber
Meningkatkan ketergantungan lombok di pom juga berhasil :)
Christophe Moine
1

Ini tidak akan menjadi masalah OP, tetapi bagi siapa pun yang mencoba semuanya tanpa hasil:

Saya mengalami gejala yang serupa. Setiap kali saya membangun setelah mvn clean, itu tidak akan menemukan log, atau getXYZ(), atau builder(), atau apa pun.

[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

Setelah membaca setiap jawaban yang saya dapat menemukan tentang masalah QueryDSL / JPA / Hibernate / Lombok / IntelliJ / Maven tidak berhasil, saya menemukan bahwa pelakunya adalah impor statis@Getter tunggal dari metode yang dianotasi pada bidang statis .

Musim semi 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
sumber
1

Ini bukan masalah IntelliJ. Jika Anda mencoba di bawah konsol, jalankan mvn install , juga putus. Semua anotasi dari lombok.extern perlu menambahkan dependensi. Paket ini mengelompokkan anotasi berikutnya:

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

Misalnya, untuk Slf4j perlu menambahkan dependensi ini ke pom.xml Anda

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>${slf4j.version}</version>
</dependency>
albertoiNET.dll
sumber
0

Setelah mengaktifkan pemroses anotasi dan menginstal plugin lombok, itu masih tidak berfungsi. Kami mengatasinya dengan mencentang opsi Ide "Delegasikan IDE build to gradle"

Kristjan Peil
sumber
0

Yang menyelesaikan masalah bagi saya adalah mencentang kotak centang "Gunakan registri plugin" di pengaturan Maven.

Jalurnya adalah: File -> Preferences -> Build, Execution, Deployment -> Build Tools -> Maven

Radu Ciobanu
sumber
0

Hapus folder .idea dan file .iml di setiap modul dan buat ulang solusinya.

Rajiv Singh
sumber
0

Saya memiliki plugin Lombok, anotasi diaktifkan, itu dikompilasi dari baris perintah - semuanya dan masih tidak melihat proyek saya sebagai maven (semua dependensi maven berwarna merah di file sumber). Kemudian saya mengklik SHIFT dua kali dan mencari 'maven' dan di antara hasil ada 'Reload all Maven Projects'. Setelah menjalankannya, tab Maven muncul dan saya dapat mengkompilasi, dan semua garis bawah merah di kode sumber menghilang.

Kirill G.
sumber
0

Hal yang sederhana tetapi saya mengetahuinya adalah: Saya ketinggalan menambahkan @Logke kelas.

@Log
public class YourClassName {


}

Ini dapat membantu seseorang.

Shylendra Madda
sumber
0

Saya memiliki masalah yang sama; Saya menggunakan gradle dan IDEA;

Ternyata hal itu disebabkan oleh versi gradle yang salah.

Dalam gradle \ wrapper \ gradle-wrapper.properties, ini adalah:

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

Namun, saya menetapkan versi di IDEA menjadi

D:\Library\gradle-5.2.1

Setelah menurunkan versi gradle menjadi 4.10.x, masalahnya hilang.

yinhaomin
sumber
0

Cobalah untuk membuat lombok.configfile di bawah direktori dasar proyek dan berikan lombok.log.fieldNamenilai.

Contoh: lombok.log.fieldName = LOG

Taras Melnyk
sumber