लोम्बोक के @ Slf4j और Intellij के साथ बिल्डिंग: प्रतीक लॉग नहीं मिल सकता है


113

मेरे पास एक मावेन प्रोजेक्ट है जो कमांड लाइन से कोई समस्या नहीं बनाता है। हालाँकि, जब मैं इसे IntelliJ के साथ बनाता हूं, मुझे त्रुटि मिलती है:

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

जावा फ़ाइल में कोई लॉग परिभाषित या आयातित नहीं है, लेकिन एक है

@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
एक ही समस्या होने पर, लोम्बोक प्लगिन को फिर से स्थापित करने में मदद मिली।
एलेक्स शुमिलोव

जवाबों:


170

लोम्बोक प्लगइन स्थापित होने के अलावा , यह भी सुनिश्चित करें कि " Enable annotation processing" चेकबॉक्स के नीचे टिक गया है:

Preferences > Compiler > Annotation Processors

नोट: IntelliJ 2017 से शुरू होकर, " Enable Annotation Processing" चेकबॉक्स आगे बढ़ गया है:

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

1
मेरे पास एनोटेशन प्रोसेसिंग सक्षम और कार्य नहीं है: | मेरे पास lombok plugin intalled है।
बेन जॉर्ज

मैंने प्लगइन स्थापित किया और इस सेटिंग को बदलने के बिना काम किया। हालांकि, मैंने इसे अच्छे उपाय के लिए बदलने का फैसला किया।
शेल्डोन्क्रेगर

6
IntelliJ 2017.2 और लोम्बोक प्लगइन्स 0.14.16 का उपयोग करते हुए, "एनोटेशन प्रोसेसिंग सक्षम करें" को सेट करना आवश्यक था और चेकबॉक्स को वरीयताएँ -> बिल्ड, निष्पादन, परिनियोजन -> कंपाइलर -> एनोटेशन प्रोसेसर के तहत पाया जाता है।
नीमी

1
IntelliJ 2018.2, lombok प्लगइन स्थापित 1.14। मुझे अभी भी इंटेलीज में एनोटेशन प्रोसेसिंग को सक्षम करना था। फ़ाइल-> सेटिंग्स-> निर्माण, निष्पादन, तैनाती-> संकलक-> एनोटेशन प्रोसेसर। इंटेलीज वास्तव में मेरे साथ जीत नहीं रहा है।
दानिक ​​सिप

32

संभवतः, यह लोम्बोक @ Slf4j एनोटेशन है जिसका आप उपयोग कर रहे हैं। यदि आप चाहते हैं कि आपको इंटेलीज में लोम्बोक एनोटेशन को पहचानना है तो आपको इंटेलीज में लोम्बोक प्लगइन स्थापित करना होगा। अन्यथा, यदि आप ऐसे क्षेत्र का उपयोग करने की कोशिश करते हैं जो मौजूद नहीं है, तो आप क्या उम्मीद करते हैं?


1
मेरे पास लोम्बोक प्लगइन स्थापित है। कॉन्फ़िगरेशन विकल्पों के संदर्भ में बहुत कुछ प्रतीत नहीं होता है। शायद यह प्लगइन में एक बग है?
user1991839

1
मैंने इसे IDEA 11 और 12. के साथ सफलतापूर्वक उपयोग किया है। कभी-कभी, लोम्बोक के बारे में कुछ "भूल" लगता है, और मुझे स्रोत कोड में लाल रेखाओं का एक गुच्छा मिलता है, लेकिन यह अभी भी मेरे लिए बनाता है। यह आता और जाता है, हालांकि, प्लगइन निश्चित रूप से बग-मुक्त नहीं है।
रयान स्टीवर्ट

क्या आप जानते हैं कि क्या इसे पाने के लिए वर्कअराउंड है? संभवतः प्लगइन के माध्यम से जाने के बिना लोम्बोक पुस्तकालयों के इंटेलीज को सूचित करना? मैं डिबगिंग परीक्षणों के लिए IntelliJ का उपयोग करने की कोशिश कर रहा हूं और यह मेरे लिए इसका उपयोग करना मुश्किल बना रहा है
user1991839

क्षमा करें, वहां आपकी मदद नहीं कर सकता। मैंने अभी तक लोम्बोक का उपयोग नहीं किया है। मैंने अभी कुछ स्थानों पर इसे आज़माया है। मैं प्लगइन के प्रोजेक्ट पृष्ठ की जांच करूंगा , लेकिन मुझे लगता है कि अभी भी इसके आसपास बहुत बड़ा समुदाय नहीं है।
रयान स्टीवर्ट

24

Intellij संस्करण 2016, 2017 में, प्राथमिकताएं सक्षम करें -> कंपाइलर -> एनोटेशन प्रोसेसर मेरे लिए काम नहीं करते हैं!

निम्नलिखित अतिरिक्त चेकबॉक्स मदद करता है: यहां छवि विवरण दर्ज करें


1
मैंने प्लगइन जोड़ा और एनोटेशन प्रोसेसर्स को सक्षम किया, फिर भी अभी तक कोई भाग्य नहीं है। क्या आप प्रदान कर सकते हैं कि उपरोक्त चेकबॉक्स तक कैसे पहुँचें?
फिलिप जॉन

@PhilipJohn: वरीयताएँ खोज बॉक्स में, "लोम्बोक" टाइप करें?
टिम लॉन्ग

वास्तव में हमें "org.slf4j" निर्भरता को जोड़ने की भी आवश्यकता है
वासिल सरझिनस्की


10

मैं एक मृत विषय को अनसुना कर सकता हूं लेकिन अगर आप लॉगबैक-कोर और लॉगबैक-क्लासिक को शामिल करते हैं तो आपकी निर्भरता (मावेन की छूट के लिए जांच) में एक सरल समाधान है ।

Slf4j सिर्फ इंटरफ़ेस है, आपको काम करने के लिए इसके पीछे ठोस कार्यान्वयन की आवश्यकता है।

आईडीए के साथ दो बार छल कर चुका हूं, अब मैं जा रहा हूं: डी


7

मेरे लिए काम किया !!! यह CircleCI और Jenkins पर भी असफल रहा था।

यदि आप एक ग्रेडल उपयोगकर्ता हैं, तो अपनी निर्भरता में निम्नलिखित जोड़ने का प्रयास करें:

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 आइटम वे हैं जिन्हें मुझे ग्रैडल का उपयोग करते समय जोड़ना होगा। पिछले प्रोजेक्ट के लिए मैंने पहले ही लोम्बोक प्लगइन का ध्यान रखा था, और एनोटेशन प्रोसेसर चेकबॉक्स पिछले प्रोजेक्ट के लिए जिसके लिए हमने मावेन का उपयोग किया था। मुझे इस त्रुटि का सामना करना पड़ा IntelliJ का उपयोग करने के बाद लोम्बोक के साथ स्प्रिंग बूट प्रोजेक्ट बनाने के लिए; इसमें compileOnly, और annotationProcessor लाइनें शामिल थीं, लेकिन परीक्षण * लाइनें नहीं।
Xenson

4

आईडीईए 13 में यह अब कोई समस्या नहीं है, आपको बस लोम्बोक प्लगइन स्थापित करना होगा।


4

मैंने अभी हाल ही में लेटेस्ट विचार 2108.1 स्थापित किया है और इस मुद्दे को पाया है, स्थापित लोबोक प्लगइन के बाद और आइडिया को फिर से शुरू करने का संकल्प लिया है।


4

यदि आप मावेन का उपयोग कर रहे हैं, तो 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>

लोम्बोक के अपने संस्करण के अनुसार संस्करण को बदलें। इसके अलावा यह सुनिश्चित करें कि आपने निम्नलिखित कार्य किए हैं

  • Intellij के लिए लोम्बोक प्लगइन स्थापित किया।
  • के तहत अपनी परियोजना के लिए सक्षम एनोटेशन प्रसंस्करण File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor। मेरे लिए दोनों, Obtain processors from project classpathऔर Processor pathकाम कर रहा है। तो यकीन नहीं है कि आप के लिए क्या काम करेगा, लेकिन जो भी काम करता है कोशिश करो।

और अंधेरे में घंटों शूटिंग करने के बजाय। थोड़ा सा पढ़ना कि एनोटेशन प्रोसेसर कैसे काम करते हैं और कंपाइलर द्वारा उपयोग किया जाता है। तो जल्दी नीचे पढ़ें।

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


यह एकमात्र समाधान है जो मेरे लिए काम करता है!
पेमचेम

2

यह मेरे लिए काम किया: File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor

'एनोटेशन प्रोसेसिंग सक्षम करें' पर टिक करें। Apply

बंद करे


2

मैंने लगभग सभी वर्णित उत्तरों की कोशिश की, लेकिन मेरे लिए कुछ भी काम नहीं किया। मेरा ग्रेडल बिल्ड हर बार विफल हो रहा था। बस यह समाधान मिला:

जोड़ना 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 आईडीईए (सेटिंग्स) में "एनोटेशन ..." को सक्षम करने के बाद, इस बात को ध्यान में रखते हुए कि आपने लोम्बोक प्लगइन स्थापित किया है, जिसने केवल एक समस्या को हल किया


1

मैं JDK8 के तहत संकलन करते समय इस मुद्दे को लोम्बोक के पुराने संस्करण के साथ देख रहा था। परियोजना को वापस 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था

वसंत १.१५.१४.रिल्लीस, इन्टेलिज २०१ ९ ।१

@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 समस्या नहीं है। यदि आप कंसोल के तहत कोशिश करते हैं, तो mvan इंस्टॉल चलाएं , ब्रेक भी। Lombok.extern से सभी एनोटेशन निर्भरता जोड़ने की जरूरत है। यह पैकेज अगले एनोटेशन को समूहित करता है:

  • CommonsLog
  • flogger
  • लॉग
  • JBossLog
  • Log4
  • Log4j2
  • Slf4j
  • XSlf4j

उदाहरण के लिए, Slf4j के लिए यह आवश्यक है कि यह निर्भरता आपके pom.xml में जोड़ें

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

0

एनोटेशन प्रोसेसर को सक्षम करने और लम्बोक प्लगइन को स्थापित करने के बाद, यह अभी भी काम नहीं किया। हमने आइडिया विकल्प "डेलिगेट आईडीई बिल्ड टू ग्रेड" की जाँच करके इसके चारों ओर काम किया


0

मावेन सेटिंग्स में चेकबॉक्स "यूज प्लगइन रजिस्ट्री" पर टिक करने के लिए मेरे लिए क्या चीजें सुलझीं।

पथ है: फ़ाइल -> प्राथमिकताएँ -> निर्माण, निष्पादन, तैनाती -> उपकरण बनाएँ -> मावेन


0

प्रत्येक मॉड्यूल में .idea फ़ोल्डर और .iml फ़ाइलों को हटाएं और समाधान का पुनर्निर्माण करें।


0

मेरे पास लोम्बोक प्लगइन था, एनोटेशन सक्षम था, यह कमांड लाइन से संकलित था - सब कुछ और यह अभी भी मेरी परियोजना को मावेन के रूप में नहीं देखता था (सभी मावेन निर्भरता स्रोत फ़ाइलों में लाल थी)। फिर मैंने दो बार SHIFT पर क्लिक किया और 'मावेन' की खोज की और परिणामों के बीच 'मावेन प्रोजेक्ट्स रीलोड' किया। इसे चलाने के बाद मावेन टैब दिखाई दिया और मैं संकलन करने में सक्षम था, और स्रोत कोड में सभी लाल अंडरलाइनिंग गायब हो गए।


0

एक साधारण सी बात लेकिन मुझे लगा कि यह है: मैं @Logकक्षा में शामिल होने से चूक गया।

@Log
public class YourClassName {


}

यह किसी की मदद कर सकता है।


0

मेरे साथ भी वही दिक्कत है; मैं ग्रेड और आईडिया का उपयोग करता हूं;

यह पता चला है कि, यह गलत संस्करण के कारण है।

ग्रेडेल \ रैपर \ gradle-wrapper.properties में, यह है:

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

हालाँकि, मैंने IDEA में संस्करण को निर्दिष्ट किया

D:\Library\gradle-5.2.1

कम संस्करण 4.10.x होने के बाद, मुद्दा चला गया है।


0

प्रोजेक्ट बेस डायरेक्टरी केlombok.config तहत फाइल बनाने और मूल्य प्रदान करने का प्रयास करें ।lombok.log.fieldName

उदाहरण: lombok.log.fieldName = LOG

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.