Xây dựng với Lombok's @ Slf4j và Intellij: Không thể tìm thấy nhật ký biểu tượng


113

Tôi có một dự án maven được xây dựng mà không gặp sự cố nào từ dòng lệnh. Tuy nhiên, khi tôi xây dựng nó bằng IntelliJ, tôi gặp lỗi:

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

Không có nhật ký được xác định hoặc nhập vào tệp java, nhưng có

@Slf4j
final public class FileName {

trước phần thân lớp sẽ xác định lớp nhật ký.

Trong cửa sổ cấu trúc dự án, các lớp cho:

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

được liệt kê trong thư viện và được chỉ ra là đã được tải xuống và có sẵn.

Bất kỳ ý tưởng nào tại sao điều này sẽ xây dựng với maven thông qua dòng lệnh, nhưng không thông qua IntelliJ và làm thế nào để giải quyết vấn đề?


5
Gặp sự cố tương tự, việc cài đặt lại Plugin Lombok đã giúp ích.
Alex Shumilov

Câu trả lời:


170

Ngoài việc cài đặt plugin Lombok , hãy đảm bảo rằng Enable annotation processinghộp kiểm "" được đánh dấu dưới:

Preferences > Compiler > Annotation Processors

Lưu ý: bắt đầu với IntelliJ 2017, Enable Annotation Processinghộp kiểm "" đã chuyển thành:

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

1
Tôi chưa bật xử lý chú thích và hoạt động: | Tôi đã sử dụng plugin lombok.
Ben George,

Tôi đã cài đặt plugin và nó hoạt động mà không cần thay đổi cài đặt này. Tuy nhiên, tôi quyết định thay đổi nó để có biện pháp tốt.
sheldonkreger

6
Sử dụng các plugin IntelliJ 2017.2 và Lombok 0.14.16, cần thiết đặt "Bật xử lý chú thích" và hộp kiểm được tìm thấy trong Tùy chọn -> Xây dựng, Thực thi, Triển khai -> Trình biên dịch -> Bộ xử lý chú thích.
Niemi

1
IntelliJ 2018.2, plugin lombok được cài đặt 1.14. Tôi vẫn phải bật xử lý chú thích trong IntelliJ. Tệp-> Cài đặt-> Xây dựng, Thực thi, Triển khai-> Trình biên dịch-> Bộ xử lý chú thích. IntelliJ không thực sự giành được điểm với tôi.
demaniak

32

Có lẽ, đó là chú thích Lombok @ Slf4j mà bạn đang sử dụng. Bạn sẽ cần cài đặt plugin Lombok trong IntelliJ nếu bạn muốn IntelliJ nhận ra các chú thích Lombok. Nếu không, bạn mong đợi điều gì nếu bạn cố gắng sử dụng trường không tồn tại?


1
Tôi đã cài đặt plugin Lombok. Có vẻ như không có nhiều tùy chọn cấu hình. Có lẽ nó là một lỗi trong plugin?
user1991839 14/02/13

1
Tôi đã sử dụng nó thành công với IDEA 11 và 12. Đôi khi, có điều gì đó dường như "quên" về Lombok và tôi nhận được một loạt các dòng màu đỏ trong mã nguồn, nhưng nó vẫn xây dựng cho tôi. Tuy nhiên, nó đến và đi, vì vậy plugin chắc chắn không có lỗi.
Ryan Stewart

Bạn có biết nếu có một giải pháp để vượt qua điều này? Giống như có thể thông báo cho IntelliJ về các thư viện Lombok mà không cần thông qua plugin? Tôi đang cố gắng sử dụng IntelliJ để gỡ lỗi các xét nghiệm và điều này được gây khó khăn cho tôi để sử dụng nó cho rằng
user1991839

Xin lỗi, không thể giúp bạn ở đó. Tôi chưa sử dụng Lombok cho lắm. Tôi vừa mới dùng thử ở một vài nơi. Tôi muốn xem trang dự án của plugin , nhưng tôi có cảm giác rằng vẫn chưa có một cộng đồng lớn xung quanh nó.
Ryan Stewart

24

Trong phiên bản Intellij 2016, 2017, bật Tùy chọn -> Trình biên dịch -> Bộ xử lý chú thích không hoạt động đối với tôi!

Hộp kiểm bổ sung sau đây sẽ giúp: nhập mô tả hình ảnh ở đây


1
Tôi đã thêm plugin và bật Bộ xử lý chú thích, vẫn chưa có may mắn. Bạn có thể cung cấp cách truy cập hộp kiểm trên không?
Philip John

@PhilipJohn: Trong hộp tìm kiếm Tùy chọn, nhập "Lombok"?
Tim Long

thực sự chúng tôi cũng cần thêm sự phụ thuộc "org.slf4j"
Vasyl Sarzhynskyi


10

Tôi có thể đang hủy một chủ đề đã chết nhưng một giải pháp đơn giản là kiểm tra các phần phụ thuộc của bạn (ví dụ: Maven's pom) nếu bạn đang bao gồm logback-corelogback-classic .

Slf4j chỉ là giao diện, bạn cần triển khai cụ thể đằng sau nó để hoạt động.

Mình đã bị lừa 2 lần với IDEA làm rối tung nó lên, giờ thì mình đi rồi: D


7

Đã làm cho tôi!!! Nó cũng thất bại trên CircleCI và Jenkins.

Nếu bạn là Người dùng Gradle, hãy thử thêm những thứ sau vào phần phụ thuộc của bạn:

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 mục cuối cùng là những thứ tôi cần thêm khi sử dụng Gradle. Đối với một dự án trước, tôi đã quan tâm đến plugin Lombok và hộp kiểm trình xử lý chú thích cho dự án trước đó mà chúng tôi đã sử dụng Maven. Tôi gặp lỗi này sau khi sử dụng IntelliJ để tạo dự án Spring Boot với Lombok được chọn; nó bao gồm các dòng compileOnly và annotationProcessor, nhưng không bao gồm các dòng test *.
Xenson

4

Trong IDEA 13, điều này dường như không còn là vấn đề nữa, bạn chỉ cần cài đặt plugin Lombok.


4

Tôi vừa cài đặt ý tưởng mới nhất Verion 2108.1 và tìm thấy sự cố này, sau khi cài đặt plugin lombok và khởi động lại Idea giải quyết nó.


4

Nếu bạn đang sử dụng maven, hãy thử thêm đường dẫn Lombok vào maven-compiler-plugindanh sách bộ xử lý chú thích như hình dưới đây.

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

Thay đổi phiên bản theo phiên bản Lombok của bạn. Ngoài ra, hãy đảm bảo rằng bạn đã thực hiện những điều sau

  • đã cài đặt plugin Lombok cho Intellij.
  • Đã bật xử lý chú thích cho dự án của bạn trong File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor. Đối với tôi cả hai, Obtain processors from project classpathProcessor pathđang làm việc. Vì vậy, không chắc chắn điều gì sẽ hiệu quả với bạn, nhưng hãy thử cách nào hiệu quả.

Và hơn là chụp trong bóng tối hàng giờ liền. Đọc một chút về cách hoạt động của bộ xử lý chú thích và được sử dụng bởi trình biên dịch có thể hữu ích. vì vậy hãy đọc nhanh bên dưới.

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


Đây là giải pháp duy nhất làm việc cho tôi!
cheemcheem

2

Điều này đã làm việc cho tôi: File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processor

Đánh dấu vào 'bật xử lý chú thích'. Apply

Đóng


2

Tôi đã thử gần như tất cả các câu trả lời được đề cập nhưng không có gì hiệu quả với tôi. Việc xây dựng lớp học của tôi đã không thành công mọi lúc. Chỉ cần tìm thấy giải pháp này:

Thêm annotationProcessor 'org.projectlombok:lombok' vào build.gradle của bạn.

Điều này đã làm việc cho tôi.


2

Việc xóa chú thích @ Slf4J khỏi lớp và sau đó thêm lại nó phù hợp với tôi.


2

1 Phụ thuộc lombok gradle của tôi:

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

2 Sau khi bật "Chú thích ..." trong IDEA (Cài đặt), có tính đến việc bạn đã cài đặt plugin Lombok, điều đó đã giải quyết được vấn đề tương tự của tôi


1

Tôi đã gặp sự cố này với phiên bản Lombok cũ hơn khi biên dịch theo JDK8. Đặt dự án trở lại JDK7 đã làm cho vấn đề biến mất.


Nâng cấp phụ thuộc Lombok trong pom cũng làm việc :)
Christophe Moine

1

Đây sẽ không phải là vấn đề của OP, nhưng đối với bất kỳ ai khác, những người đã thử mọi thứ mà không thành công:

Tôi đã có các triệu chứng tương tự. Bất cứ khi nào tôi đã xây dựng sau một mvn clean, nó sẽ không tìm thấy log, hoặc getXYZ(), hoặc builder(), hoặc bất cứ điều gì.

[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

Sau khi đọc mọi câu trả lời mà tôi có thể tìm thấy về các vấn đề QueryDSL / JPA / Hibernate / Lombok / IntelliJ / Maven, tôi đã phát hiện ra rằng thủ phạm là một @Getterphương thức nhập tĩnh duy nhất được chú thích trên một trường tĩnh .

Spring 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

Đó không phải là vấn đề của IntelliJ. Nếu bạn thử dưới console, chạy mvn install , cũng hỏng. Tất cả các chú thích từ lombok.extern cần thêm phần phụ thuộc. Gói này nhóm các chú thích tiếp theo:

  • CommonsLog
  • Flogger
  • Nhật ký
  • JBossLog
  • Log4
  • Log4j2
  • Slf4j
  • XSlf4j

Ví dụ: đối với Slf4j, cần thêm phụ thuộc này vào pom.xml của bạn

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

0

Sau khi bật bộ xử lý chú thích và cài đặt plugin lombok, nó vẫn không hoạt động. Chúng tôi đã giải quyết vấn đề này bằng cách chọn tùy chọn Ý tưởng "Ủy quyền bản dựng IDE để phân loại"


0

Điều sắp xếp đối với tôi là đánh dấu vào hộp kiểm "Sử dụng đăng ký plugin" trong cài đặt Maven.

Đường dẫn là: File -> Preferences -> Build, Execution, Deployment -> Build Tools -> Maven


0

Xóa thư mục .idea và các tệp .iml trong mỗi mô-đun và xây dựng lại giải pháp.


0

Tôi đã sử dụng plugin Lombok, kích hoạt chú thích, nó đang biên dịch từ dòng lệnh - mọi thứ và nó vẫn không thấy dự án của tôi là maven (tất cả các phụ thuộc maven đều có màu đỏ trong các tệp nguồn). Sau đó, tôi nhấp vào SHIFT hai lần và tìm kiếm 'maven' và trong số các kết quả có 'Tải lại tất cả các Dự án Maven'. Sau khi chạy nó, tab Maven xuất hiện và tôi có thể biên dịch, và tất cả gạch dưới màu đỏ trong mã nguồn đã biến mất.


0

Một điều đơn giản nhưng tôi đã hình dung ra là: Tôi đã lỡ thêm @Logvào lớp.

@Log
public class YourClassName {


}

Nó có thể giúp ích cho ai đó.


0

Tôi có cùng một vấn đề; Tôi sử dụng gradle và IDEA;

Hóa ra là do phiên bản gradle sai.

Trong gradle \ wrapper \ gradle-wrapper.properties, nó là:

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

Tuy nhiên, tôi đã chỉ định phiên bản trong IDEA là

D:\Library\gradle-5.2.1

Sau khi hạ phiên bản gradle xuống còn 4.10.x, sự cố đã biến mất.


0

Cố gắng tạo lombok.configtệp trong thư mục cơ sở của dự án và cung cấp lombok.log.fieldNamegiá trị.

Thí dụ: lombok.log.fieldName = LOG

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.