Lombok's @ Slf4j ve Intellij ile bina: Sembol günlüğü bulunamıyor


113

Komut satırından sorunsuz bir şekilde inşa edilen bir maven projem var. Ancak, IntelliJ ile oluşturduğumda şu hatayı alıyorum:

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

Java dosyasında tanımlanmış veya içe aktarılan günlük yok, ancak bir

@Slf4j
final public class FileName {

log sınıfını tanımlaması gereken sınıf gövdesinden önce ifade.

Proje yapısı penceresinde şu sınıflar:

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

Kitaplıklar altında listelenir ve indirilmiş ve kullanılabilir olarak belirtilir.

Bunun neden komut satırı aracılığıyla maven ile oluşturulacağı, ancak IntelliJ aracılığıyla oluşturulmadığı ve sorunun nasıl çözüleceği hakkında bir fikriniz var mı?


5
Aynı sorunu yaşayarak Lombok Eklentisini yeniden yüklemek yardımcı oldu.
Alex Shumilov

Yanıtlar:


170

Lombok eklentisinin kurulu olmasına ek olarak , aşağıdaki " Enable annotation processing" onay kutusunun işaretlendiğinden de emin olun :

Preferences > Compiler > Annotation Processors

Not: IntelliJ 2017'den itibaren " Enable Annotation Processing" onay kutusu şu konuma taşındı:

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

1
Ek açıklama işlemeyi etkinleştirmedim ve çalışıyor: | Yerleşik lombok eklentim var.
Ben George

Eklentiyi kurdum ve bu ayarı değiştirmeden çalıştı. Ancak, iyi bir önlem için değiştirmeye karar verdim.
sheldonkreger

6
IntelliJ 2017.2 ve Lombok eklentileri 0.14.16 kullanıldığında, "Ek açıklama işlemeyi etkinleştir" ayarı gerekliydi ve onay kutusu Tercihler -> Oluşturma, Yürütme, Dağıtım -> Derleyici -> Ek Açıklama İşlemcileri altında bulunur.
Niemi

1
IntelliJ 2018.2, lombok eklentisi yüklü 1.14. Yine de IntelliJ'de ek açıklama işlemeyi etkinleştirmem gerekiyordu. Dosya-> Ayarlar-> Derleme, Yürütme, Dağıtım-> Derleyici-> Ek Açıklama İşlemcileri. IntelliJ benimle gerçekten puan kazanmıyor.
demaniak

32

Muhtemelen, bu, kullandığınız Lombok @ Slf4j ek açıklamasıdır. IntelliJ'in Lombok açıklamalarını tanımasını istiyorsanız, Lombok eklentisini IntelliJ'de yüklemeniz gerekir. Aksi takdirde, var olmayan bir alanı kullanmaya çalışırsanız ne bekliyorsunuz?


1
Lombok eklentisini kurdum. Yapılandırma seçenekleri açısından pek bir şey yok gibi görünüyor. Eklentideki bir hata olabilir mi?
user1991839

1
Bunu IDEA 11 ve 12 ile başarılı bir şekilde kullandım. Bazen Lombok hakkında bir şeyler "unutuluyor" ve kaynak kodda bir sürü kırmızı çizgi görüyorum, ama yine de benim için oluşturuyor. Yine de gelir ve gider, bu nedenle eklenti kesinlikle hatasız değildir.
Ryan Stewart

Bunu aşmak için bir çözüm olup olmadığını biliyor musunuz? Eklenti kullanmadan IntelliJ'i Lombok kitaplıkları hakkında bilgilendirmek gibi mi? Testlerde hata ayıklama için IntelliJ kullanmaya çalışıyorum ve bu benim için onu kullanmamı zorlaştırıyor
user1991839

Maalesef size yardımcı olamıyorum. Henüz Lombok'u pek kullanmadım. Bunu birkaç yerde denedim. Eklentinin proje sayfasına bakardım , ancak etrafında henüz çok büyük bir topluluk olmadığını hissediyorum.
Ryan Stewart

24

Intellij 2016, 2017 sürümünde Tercihler -> Derleyici -> Ek Açıklama İşlemcileri'ni etkinleştir benim için çalışmıyor!

Aşağıdaki ek onay kutusu yardımcı olur: görüntü açıklamasını buraya girin


1
Eklentiyi ekledim ve Ek Açıklama İşlemcilerini etkinleştirdim, henüz şans yok. Yukarıdaki onay kutusuna nasıl erişileceğini sağlayabilir misiniz?
Philip John

@PhilipJohn: Tercihler arama kutusuna "Lombok" yazın.
Tim Long

aslında "org.slf4j" bağımlılığını da eklememiz gerekiyor
Vasyl Sarzhynskyi


10

Ölü bir konuyu düzeltiyor olabilirim, ancak basit bir çözüm, logback-core ve logback-classic dahil ediyorsanız , bağımlılıklarınızı kontrol etmektir (örneğin Maven'in pomu) .

Slf4j sadece arayüz, çalışması için arkasında somut uygulamaya ihtiyacınız var.

IDEA ile iki kez kandırıldım , şimdi gitmekte iyiyim: D


8

Benim için çalıştı !!! CircleCI ve Jenkins'te de başarısız oluyordu.

Bir Gradle Kullanıcısı iseniz, aşağıdakileri bağımlılıklarınıza eklemeyi deneyin:

dependencies {
    //Other Dependencies >>

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

Son 3 öğe Gradle'ı kullanırken eklemem gerekenlerdi. Önceki bir proje için Lombok eklentisini ve Maven'i kullandığımız önceki bir projenin not işlemcisi onay kutusunu zaten halletmiştim. Lombok seçili olarak bir Spring Boot projesi oluşturmak için IntelliJ'i kullandıktan sonra bu hatayla karşılaştım; compileOnly ve annotationProcessor satırlarını içeriyordu, ancak test * satırlarını içermiyordu.
Xenson

4

IDEA 13'te bu artık bir sorun gibi görünmüyor, sadece Lombok eklentisinin kurulu olması gerekiyor.


4

En son fikir versiyonu 2108.1'i yeni yükledim ve bu sorunu buldum, lombok eklentisini yükledikten ve Fikri çözdükten sonra yeniden başlattım.


4

Maven kullanıyorsanız, maven-compiler-pluginaşağıda gösterildiği gibi açıklama işlemcisi listesine Lombok yolunu eklemeyi deneyin .

        <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 sürümünüze göre sürümü değiştirin. Bunun dışında aşağıdakileri yaptığınızdan emin olun

  • Intellij için Lombok eklentisini kurdu.
  • Altındaki projeniz için ek açıklama işleme etkinleştirildi File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor. Benim ikisi için Obtain processors from project classpathve Processor pathçalışıyor. Bu yüzden sizin için neyin işe yarayacağından emin değilsiniz, ancak hangisinin işe yaradığını deneyin.

Ve karanlıkta saatlerce çekim yapmak yerine. Ek açıklama işlemcilerinin nasıl çalıştığını ve derleyici tarafından nasıl kullanıldığını biraz okumak yardımcı olabilir. bu yüzden aşağıda hızlıca okuyun.

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


Benim için işe yarayan tek çözüm bu!
cheemcheem

2

Bu benim için çalıştı: File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor

'Ek açıklama işlemeyi etkinleştir' seçeneğini işaretleyin. Apply

Kapat


2

Bahsedilen cevapların neredeyse tamamını denedim ama hiçbir şey benim için işe yaramadı. Gradle yapım her seferinde başarısız oluyordu. Şu çözümü buldum:

Ekle annotationProcessor 'org.projectlombok:lombok' sizin build.gradle içinde.

Bu benim için çalıştı.


2

@ Slf4J açıklamasını sınıftan kaldırmak ve ardından yeniden eklemek benim için çalıştı.


2

1 Gradle Lombok bağımlılığım:

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

2 IDEA'da (Ayarlar) "Ek Açıklamalar ..." seçeneğini etkinleştirdikten sonra, aynı sorunu çözen Lombok eklentisini yüklediğinizi dikkate alarak


1

Bu sorunu JDK8 altında derlerken Lombok'un eski bir sürümünde görüyordum. Projeyi tekrar JDK7'ye ayarlamak sorunu çözdü.


Pom içinde lombok bağımlılığını Yükseltme da :) işleri
Christophe Moine

1

Bu OP'nin sorunu olmayacak, ancak her şeyi deneyen ve başarılı olamayanlar için :

Benzer semptomlarım vardı. Ne zaman a'dan sonra inşa etsem mvn clean, bulamazdı log, ya getXYZ()da builder(), ya da hiçbir şey.

[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 sorunları hakkında bulabildiğim her cevabı boşuna okuduktan sonra, suçlunun statik bir alana ek açıklamalı bir @Getteryöntemin tek bir statik ithalatı olduğunu anladım .

İlkbahar 1.15.14. YAYIN, 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 sorunu değil. Konsol altında denerseniz, mvn kurulumunu çalıştırın , ayrıca kesilir . Lombok.extern'deki tüm ek açıklamalara bağımlılıklar eklemek gerekiyordu. Bu paket, sonraki ek açıklamaları gruplandırır:

  • CommonsLog
  • Flogger
  • Günlük
  • JBossLog
  • Log4
  • Log4j2
  • Slf4j
  • XSlf4j

Örneğin, Slf4j için bu bağımlılığı pom.xml dosyanıza eklemeniz gerekir.

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

0

Ek açıklama işlemcilerini etkinleştirdikten ve lombok eklentisini yükledikten sonra hala çalışmadı. "IDE derlemesini derecelendirmek için delege et" Fikir seçeneğini işaretleyerek bunun üstesinden geldik


0

Benim için çözülen şey, Maven ayarlarında "Eklenti kaydını kullan" onay kutusunu işaretlemekti.

Yol şudur: Dosya -> Tercihler -> Derleme, Yürütme, Dağıtım -> Derleme Araçları -> Maven


0

Her modülde .idea klasörünü ve .iml dosyalarını silin ve çözümü yeniden oluşturun.


0

Lombok eklentisine sahiptim, ek açıklamalar etkinleştirildi, komut satırından derleniyordu - her şey ve yine de projemi maven olarak görmedi (kaynak dosyalarda tüm maven bağımlılıkları kırmızıydı). Sonra iki kez ÜSTKRKT'e tıkladım ve 'maven' aradım ve sonuçlar arasında 'Tüm Maven Projelerini Yeniden Yükle' vardı. Çalıştırdıktan sonra Maven sekmesi göründü ve derleyebildim ve kaynak koddaki tüm kırmızı alt çizgiler kayboldu.


0

Basit bir şey ama anladım ki: @LogSınıfa eklemeyi kaçırdım .

@Log
public class YourClassName {


}

Birine yardımcı olabilir.


0

Bende de aynı sorun var; Gradle ve IDEA kullanıyorum;

Bunun gradle'ın yanlış versiyonundan kaynaklandığı ortaya çıktı.

Gradle \ wrapper \ gradle-wrapper.properties dosyasında bu:

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

Ancak, IDEA'daki sürümü şu şekilde belirttim:

D:\Library\gradle-5.2.1

Gradle sürümünü 4.10.x'e indirdikten sonra sorun ortadan kalktı.


0

lombok.configAltında dosya oluşturmayı deneyinProje temel dizinivelombok.log.fieldNamedeğersağlayın.

Misal: lombok.log.fieldName = LOG

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.