Không thể biên dịch dự án khi tôi đang sử dụng Lombok trong IntelliJ IDEA


202

Tôi đang cố gắng sử dụng Lombok trong dự án của mình mà tôi đang phát triển bằng IntelliJ IDEA 11.

Tôi đã cài đặt plugin của bên thứ 3 cho IDEA và có vẻ như nó hoạt động tốt vì IDEA thấy tất cả các phương thức / trường được tạo tự động.

Vì vậy, tôi có một lớp sử dụng Slf4j. Tôi chú thích nó như thế này

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class TestClass
{
    public TestClass()
    {
        log.info("Hello!");
    }
}

Nhưng khi tôi xây dựng trình biên dịch dự án của tôi nhổ : cannot find symbol variable log.

Bạn có thể vui lòng cho tôi biết những gì tôi đang thiếu ở đây?

Cập nhật: Hóa ra đó là quá trình chú thích RequestFactory không thành công.

input files: {com.zasutki.courierApp.server.TestServlet, com.mine.courierApp.server.model.DatastoreObject}

annotations: [javax.inject.Singleton, javax.inject.Inject, lombok.Getter, lombok.Setter, com.googlecode.objectify.annotation.Id, com.googlecode.objectify.annotation.OnSave]

Processor com.google.web.bindery.requestfactory.apt.RfValidator matches [lombok.Getter, com.googlecode.objectify.annotation.Id, javax.inject.Inject, lombok.Setter, com.googlecode.objectify.annotation.OnSave, javax.inject.Singleton] and returns false.

cannot find symbol variable log

Bất kỳ ý tưởng về cách giải quyết?

Update2: Có lẽ đó không phải là thứ mà độc giả muốn nghe nhưng cuối cùng tôi đã chuyển sang Scala .


Lỗi xuất hiện ngay cả khi không có plugin. Tôi không thể chạy thử nghiệm dự án nếu Lombok nằm trong phần phụ thuộc pom.xml của tôi.
Nowaker

1
Người đọc thực sự thích nghe rằng bạn đã chuyển sang Eclipse.
Simeon Leyzerzon

1
Độc giả đến đây để tìm giải pháp cho vấn đề trong tay, làm cho IntelliJ hoạt động với lombok.
Florian F

Câu trả lời:


411

Tôi đã sửa nó trong IDEA 12 bằng cách đặt hộp kiểm Enable annotation processingtrong:

Cài đặt -> Trình biên dịch -> Bộ xử lý chú thích

Đối với IDEA 2016.2:

Tùy chọn ...> Xây dựng, Thi hành, Triển khai> Trình biên dịch> Bộ xử lý chú thích

Sau khi bật, hãy chạy Build -> Rebuild Project để nhận ra các chú thích và loại bỏ lỗi.


Đối với IDEA 2019.2.1, tùy thuộc vào cách cấu hình dự án, cài đặt plugin Project Lombok có thể không đủ. Đây là một cách khác để sử dụng Project Lombok với IntelliJ IDEA:

  1. Truy cập https://projectlombok.org/d Download
  2. Tải tập tin JAR vào thư mục lib của dự án (ví dụ $HOME/dev/java/project/libs:).
  3. Bắt đầu IDE.
  4. Nhấp vào Tệp 🠖 Cài đặt .
  5. Mở rộng Xây dựng, Thi hành, Triển khai Trình biên dịch Bộ xử lý chú thích .
  6. Đảm bảo cho phép xử lý chú thích được kiểm tra.
  7. Đảm bảo Store tạo nguồn liên quan đến được chọn dựa trên cài đặt mô-đun của dự án (nếu thư mục đầu ra Mô-đun không hoạt động, hãy quay lại và thử cài đặt khác).
  8. Nhấp vào Áp dụng .
  9. Nhấp vào Plugin .
  10. Nhấp vào Thị trường .
  11. Đặt trường tìm kiếm thành: lombok
  12. Cài đặt Lombok .
  13. Nhấn OK .
  14. Khởi động lại IDE nếu được nhắc.
  15. Nhấp vào Tệp Settings Cài đặt dự án .
  16. Chọn Thư viện .
  17. Nhấp vào biểu tượng + để thêm thư viện dự án mới (hoặc nhấn Alt+ Insert).
  18. Chọn Java .
  19. Đặt đường dẫn thành: $HOME/dev/java/project/libs/lombok.jar
  20. Nhấn OK .
  21. Chọn các mô-đun để áp dụng.
  22. Nhấn OK .
  23. Tùy chọn, đổi tên lombokthành Project Lombok 1.18.8.
  24. Nhấn OK .

Dự án hiện có thể nhập từ lombokgói và sử dụng các chú thích Project Lombok (ví dụ, lombok.Setterlombok.Getter).


Tôi đã phải dừng Win10 vì sự cố đóng băng (tai nạn phi công) và IntelliJ đã được mở. Khi khởi động lại, tôi đoán các tệp ý tưởng trong thư mục dự án của tôi đã bị thay đổi (workspace.xml) và sau đó tôi không thể tạo các phương thức getters / setters của mình thông qua lombok. "Không thể tìm thấy biểu tượng" tại thời điểm xây dựng. Tôi vật lộn một chút để phát hiện ra nguồn gốc của vấn đề.
Alex

2
Đừng quên thiết lập bộ xử lý chú thích: lombok.launch.AnnotationProcessorHider $ AnnotationProcessor cho cả maven-Trình biên dịch-plugin và Ý tưởng (Cài đặt -> Trình biên dịch -> Bộ xử lý chú thích)
Jan Kubovy

3
Điều này không làm việc cho tôi trong năm 2016.2. Dự án web Maven. Điều duy nhất có tác dụng là cài đặt plugin lombok.
maksimov

Ý tưởng 16.2.2 + gradle + plugin cài đặt lombok. Tôi có thể chạy dự án mà không cần điều này khi sử dụng bảng điểm lớp (từ ý tưởng). Nếu tôi muốn chạy trực tiếp (vì đây là cách duy nhất tôi biết để làm cho mã hotswap hoạt động) tôi phải kích hoạt xử lý chú thích. Ý tưởng đoán không tự động cấu hình đầy đủ dự án và chú thích không được xử lý mặc dù plugin?
Neikius

Làm việc cho tôi trong IDEA 2017.01. Cài đặt Lombok hoạt động cho Intellisense, nhưng không phải để biên dịch cho đến khi Bộ xử lý chú thích được bật.
tham lam

73

Kích hoạt xử lý chú thích sẽ làm cho nó hoạt động

Nhưng nếu bạn ở trên máy Mac , hãy đảm bảo bạn bật xử lý chú thích (đánh dấu vào hộp kiểm) từ cả hai vị trí có sẵn.

1.) Ý tưởng Intellij -> Tùy chọn -> Trình biên dịch -> Bộ xử lý chú thích

2.) Tệp -> Cài đặt khác -> Cài đặt mặc định -> Trình biên dịch -> Bộ xử lý chú thích


2
Vẫn phải làm điều này ngay cả với intellij mới nhất 15.0.2
BeepDog

1
Vẫn có mặt trong 15.0.4. Tôi cũng đã phải cập nhật phiên bản Lambok mới nhất và thay đổi trình biên dịch Java thành JAVAC. Sau đó, xây dựng lại dự án
Srikanta

Vẫn phải làm trong IntelliJ 2016.1.3 :) Bạn phải đặt 2 bộ xử lý chú thích. Thật là một nỗi đau khi bạn quên nó!
Ray Hunter

Vẫn phải làm trong IntelliJ 2016.3 :)
Sukesh Kotian

ngay cả khi kích hoạt ở cả hai nơi, IntelliJ 2016.3.2 vẫn không thể biên dịch với Lombok 1.16.12 :(
arcuri82

56

Hình ảnh đại diện giải quyết vấn đề này.

Đầu tiên kích hoạt bộ xử lý chú thích và thử. Điều này có thể hoặc không thể làm việc. nhập mô tả hình ảnh ở đây

Đăng rằng, bạn có thể cài đặt plugin lombok từ intellij, (Sau khi cài đặt, Intellij sẽ khởi động lại để kích hoạt plugin, vì vậy hãy đảm bảo bạn lưu công việc của mình. (Intellij lưu tất cả các thay đổi trước khi khởi động lại, chỉ để ở bên an toàn.) ) ảnh chụp màn hình bên dưới:

nhập mô tả hình ảnh ở đây


3
cảm ơn bạn .. tôi đã có cùng một vấn đề Tôi đã quên cài đặt plugin trước khi đặt cấu hình Chú thích :)
TYL

19
  1. Hãy chắc chắn rằng nó được thêm chính xác vào dự án của bạn.

ví dụ cho Gradle:

 dependencies {
     compileOnly 'org.projectlombok:lombok:1.18.8'
     annotationProcessor 'org.projectlombok:lombok:1.18.8'
     ...
 }
  1. Cài đặt plugin Lombok cho IDE của bạn
  2. Chọn hộp kiểm "Kích hoạt xử lý chú thích" trong IDE (IntellijIdea), không biết liệu có bất cứ điều gì như thế này cho các IDE khác như Eclipse không.

1
cái này, cái này, và một ngàn lần cái này Cảm ơn bạn, tôi đã bị mắc kẹt trong một giờ
ch1ll

1
vâng, bạn đã đúng, chúng ta nên kiểm tra cấu hình bản dựng trước, sau đó cài đặt IDE. cảm ơn một đống
Eric Tan

Đây là điều duy nhất thực sự làm việc! Tại sao nó chỉ có 13 lượt thích?!
Doctorram

Giải pháp duy nhất hiệu quả với tôi: D cảm ơn bạn !!
Bianca

9

Chỉ để tham khảo bằng IntelliJ 2018.3 , tôi đã giải quyết vấn đề này (sử dụng @Datachú thích để chèn getter/setter) theo ba bước:

  1. Tệp -> Cài đặt -> Xây dựng, Thực thi, Triển khai -> Bộ xử lý chú thích -> Bật Xử lý chú thích;

nhập mô tả hình ảnh ở đây

Hãy nhớ áp dụng thay đổi.

  1. Cài đặt plugin lombok trong hộp thoại cài đặt tương tự;

nhập mô tả hình ảnh ở đây

  1. Có vẻ như đủ tốt cho bây giờ, nó yêu cầu khởi động lại IntelliJ và sau đó xây dựng lại dự án của bạn.

Lời chúc tốt nhất :)


Bạn đã có maven hoặc gradle? Tôi đang gặp vấn đề khiến lombok hoạt động cho một dự án đa mô-đun. Tôi liên tục nhận được lỗi: Error:java: Annotation processing is not supported for module cycles. Please ensure that all modules from cycle [module-core,module-utils] are excluded from annotation processing
0x01Brain

@ 0x01Brain Tôi đã sử dụng maven tại thời điểm đó, nhưng bây giờ sử dụng gradle thay thế. Đối với câu hỏi của bạn, tôi hy vọng bạn có thể bắt đầu một câu hỏi cụ thể mới để mô tả chi tiết và có rất nhiều chuyên gia ngoài kia sẽ giúp bạn;)
Nghe

đừng bận tâm tôi đã biên dịch nó ngay bây giờ, cảm ơn. Tôi đã có một số xung đột trong mô-đun phụ thuộc đã được nhập vào mô-đun utils và mô-đun utils được nhập vào mô-đun lõi tạo ra xung đột.
0x01Brain

8

Nếu bạn đã kiểm tra cả hai bước này như sau

  1. Bật chú thích: đây là kiểm tra được thực hiện trong tùy chọn IntelliJ.
  2. Nhập lombok vào IntelliJ classPath (Tùy chọn -> Plugin)

và vẫn nhận được lỗi, vui lòng kiểm tra trình biên dịch - nếu đó là JAVAC hoặc ECLIPSE .

Bạn có thể kiểm tra trình biên dịch trong Tùy chọn -> Xây dựng, Thi hành, Triển khai -> Trình biên dịch -> Trình biên dịch Java.

Thay đổi trình biên dịch Use thành Javac (nếu là Eclipse). Đây là những gì làm việc cho tôi.


8

trong phiên bản Gradle mới nhất, bạn nên sử dụng annotationProcessor:

compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok:1.18.8'

7

Như đã lưu ý ở đây , trích dẫn: "Bạn nên kích hoạt tùy chọn trình biên dịch bên ngoài và kích hoạt bộ xử lý chú thích hoặc vô hiệu hóa trình biên dịch bên ngoài và vô hiệu hóa tất cả các trình biên dịch chú thích để làm việc với lombok". Điều này đã khắc phục vấn đề của tôi. Lưu ý rằng tôi đã thêm plugin Scala trước khi nhận được lỗi này, vì vậy tôi nghi ngờ plugin đã thay đổi một số cài đặt ở trên.


7

Có một plugin cho intellij. xem tại đây: https://projectlombok.org/doad.html


2
Plugin này có thể được cài đặt trong menu Cài đặt / Plugin của Intellij. Hãy chắc chắn rằng bạn đã cài đặt plugin mới nhất. Nâng cấp lên plugin mới nhất làm việc cho tôi.
JasonM1

5

Bạn có lombok là phụ thuộc của dự án của bạn? lombok.jar phải nằm trên đường dẫn lớp trong quá trình biên dịch dự án, đang sử dụng bất kỳ chú thích lombok nào.


Hóa ra nó thất bại bên trong bộ xử lý chú thích. Tôi đã cập nhật câu hỏi của tôi với nhật ký đầu ra.
chuyên gia

3

tôi đã ở Mac

Đây là phiên bản IntelliJ IDEA và Mac của tôi - IntelliJ IDEA 2017.1.5 Build # IU-171.4694,70 --- Mac OS X 10.12

Ngoài việc cho phép xử lý chú thích (đánh dấu vào hộp kiểm) tại 2 địa điểm này.

1.) Intellij IDEA -> Tùy chọn -> Trình biên dịch -> Bộ xử lý chú thích

.

2.) Tệp -> Cài đặt khác -> Cài đặt mặc định -> Trình biên dịch -> Bộ xử lý chú thích

Tôi cũng phải cài đặt plugin Lombok để làm cho nó hoạt động.

3.) Intellij IDEA -> Tùy chọn -> Plugin -> Duyệt kho lưu trữ-> Tìm kiếm "Lombok" -> cài đặt plugin -> Áp dụng và khởi động lại IDEA


2

Đối với những bạn vẫn gặp khó khăn:

Ngoài các bước trên để kích hoạt bộ xử lý chú thích và cài đặt plugin IntelliJ Lombok, tôi cũng phải xây dựng -> Xây dựng lại dự án.


2
Tôi cũng phải vô hiệu hóa bộ đệm và khởi động lại trước khi Intellij ngừng phàn nàn.
Hans

2

1 、 cài đặt plugin lombok cho IDEA

Ý tưởng Intellij -> Tùy chọn -> Plugin -> nhập vào lombok -> Tìm kiếm trong kho -> cài đặt -> khởi động lại IDEA

2 plugin cấu hình lombok

Kích hoạt xử lý chú thích sẽ làm cho nó hoạt động

Nhưng nếu bạn ở trên máy Mac, hãy đảm bảo bạn bật xử lý chú thích ở hai nơi sau:

Ý tưởng Intellij -> Tùy chọn -> Xây dựng, Thi hành, Triển khai -> Trình biên dịch -> Bộ xử lý chú thích, chọn hộp kiểm "Kích hoạt xử lý chú thích". Tệp -> Cài đặt khác -> Cài đặt mặc định -> Xây dựng, Thực thi, Triển khai -> Trình biên dịch -> Bộ xử lý chú thích, chọn hộp kiểm "Kích hoạt xử lý chú thích".


Tôi không thấy Cài đặt mặc định trong Cài đặt khác trong IntelliJ. Là những vẫn còn hiện diện. Tôi đang sử dụng phiên bản Ultimate - phiên
bản11.03

1

Nó không làm việc với tôi với bất kỳ giải pháp nào ở trên. Tôi đã thêm <scope>provided</scope>vào phần phụ thuộc trong pom.xml và nó đã hoạt động.

<dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.20</version>
        <scope>provided</scope>
    </dependency>

Phiên bản nào của IntelliJ bạn đang sử dụng? Ngoài ra, phiên bản JDK nào?
realPK

1

Tôi đã gặp phải vấn đề này sau khi cập nhật IDEA lên 2018.3. Tôi đã phải cập nhật tất cả các plugin hiện có


1

Sau khi thử tất cả các đề xuất ở đây, tôi cũng đã tìm thấy một loại giải pháp khác. Có vẻ như đôi khi IDEA không thể có được bộ xử lý từ đường dẫn dự án.

Vì vậy, trên tab Cài đặt Bộ xử lý chú thích , bạn phải chỉ định thủ công đường dẫn Bộ xử lý .


0

Tôi gặp vấn đề tương tự khi xây dựng với JDK8, đặt dự án trở lại JDK7 và nó hoạt động tốt. Có thể là một phiên bản cũ hơn của Lombok sẽ không được biên dịch theo JDK8.


Tôi cũng có vấn đề tương tự. Hãy thử thay đổi phiên bản Lombok để IntelliJ tải lại phần phụ thuộc.
Sanghyun Lee

0

Tôi đã có cùng một vấn đề vì vậy tôi sẽ để nó ở đây để tham khảo trong tương lai về sự lãng quên của tôi.

Khi Alt+Entering vào @Slf4jchú thích tôi đã chọn nhầm nhập không hợp lệ. Vì vậy, nếu mã không biên dịch, hãy đảm bảo rằng bạn nhập:

import lombok.extern.slf4j.Slf4j;


0

FWIW - Khi cài đặt các chú thích trình biên dịch như được mô tả ở trên, hãy đảm bảo bạn cũng kiểm tra mọi cấu hình bạn đang sử dụng, chẳng hạn như "Bộ xử lý chú thích mặc định Maven".


0

Có thể xảy ra rằng ngay cả khi bạn đã cấu hình đúng và nó hiển thị giữa các thư viện và trong danh sách phụ thuộc Gradle, IntelliJ vẫn không có nó trong đường dẫn lớp. Hoặc nó ở đó, nhưng được cấu hình với phạm vi khác nhau (ví dụ: test thay vì biên dịch.)

Trước tiên, hãy đảm bảo bạn đã cài đặt plugin và xử lý chú thích được bật, như đã nêu trong các câu trả lời khác.

Nếu bạn vẫn không nhận thấy chú thích, hãy đặt con trỏ lên đó, nhấn ALT + ENTER (hoặc TÙY CHỌN + ENTER) và xem bạn có tùy chọn menu không Add library: Gragle: org.projectlombok:lombok:VERSION to class path . Nếu bạn có thể nhìn thấy nó, hãy chọn cái này và nó có thể giải quyết vấn đề của bạn.

Bạn có thể kiểm tra thư viện và phạm vi của nó trong: Cài đặt dự án / Mô-đun / tab Phụ thuộc (tìm kiếm lombok trong đó)


0

Nếu bạn đã thử tất cả các giải pháp được trình bày ở đây mà vẫn không thể biên dịch các nguồn, hãy xem tại đây: Nhập tĩnh của lớp trình tạo phá vỡ việc tạo mã byte trong Maven - hãy xem các nguồn của bạn nếu nó có nhập tĩnh như vậy. Điều này ảnh hưởng đến plugin maven, vì vậy quá trình biên dịch sẽ thất bại trên các hệ thống xây dựng khác ngoài IntelliJ IDEA.


0

Trong trường hợp của tôi, tôi đã có tất cả những điều được đề cập dưới đây và nó vẫn không hoạt động.

  1. Tôi đã cài đặt plugin lombok đúng cách
  2. Bộ xử lý chú thích, cũng được kiểm tra.
  3. Trình biên dịch Java của tôi đã được đặt thành JAVAC

Để khắc phục sự cố của tôi, tôi đã phải

  1. Cập nhật lombok lên phiên bản mới nhất (v0.15) vào ngày 7 tháng 10 năm 2017.
  2. Khởi động lại IntelliJ.
  3. Xây dựng lại dự án.

Xem ảnh chụp màn hình về cách cập nhật và xây dựng lại dự án dưới đây.

Làm thế nào để cập nhật lombok

Làm thế nào để xây dựng lại dự án


0

Bạn có thể khắc phục cannot find symbol variable logkhi sử dụng lombok trong IntelliJ IDEA 2017.1.3 bằng cách thực hiện:

Tùy chọn IntelliJ> Xây dựng, Thực thi, Triển khai> Bộ xử lý chú thích> [Kiểm tra] Kích hoạt xử lý chú thích> Áp dụng


0

Cài đặt plugin bên dưới và khởi động lại IDE để khắc phục lỗi:

File -> Settings -> Plugins-> Browse Repositories -> Lombok Plugin

Kích hoạt bộ xử lý chú thích:

File -> Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processors
File -> Other Settings -> Default Settings -> Compiler -> Annotation Processors

0

Tôi phải đối mặt với một vấn đề tương tự. Sau đây làm việc cho tôi.

tải xuống (từ đây https://projectlombok.org/doad ) và thêm jar trong cấu trúc dự án của bạn.

Các bước: Tệp -> Cấu trúc dự án -> Thư viện toàn cầu


0

Nếu libs lombok được đặt chính xác, như nhiều đề cập ở trên, nhấp vào chú thích sẽ không biên dịch, Alt-Enter, nhập chính xác sẽ xuất hiện và mã sẽ biên dịch. - tôi phải mất một lúc để tìm ra nó. Tôi đặt nó ở đây chỉ trong trường hợp mọi người có thể bỏ lỡ đơn giản rõ ràng.


0

Đối với người dùng Eclipse trên MacOS, hãy làm điều này. Nó làm việc cho tôi.

  1. Sao chép lombok.jar vào Eclipse.app/Contents/MacOSthư mục.
  2. Thêm -javaagent:lombok.jarvào cuối tệp Eclipse.app/Contents/Eclipse/eclipse.ini.
  3. Khởi động lại Eclipse và cho phép Xử lý chú thích của Wikipedia trong các thuộc tính của dự án.

Tham khảo điều này


0

Ngoài việc được đề cập trong tất cả các câu trả lời, tôi phải thêm đoạn mã dưới đây trong cấu hình pom.xml để làm cho mvn cài đặt sạch hoạt động. Trước khi thêm mã này, tôi đã không thể tìm thấy biểu tượng cho getters và setters.

                    <annotationProcessorPath>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>1.18.8</version>
                    </annotationProcessorPath>

0

Đối với tôi những gì đã làm việc:

  1. Tôi đã gỡ cài đặt plugin Lombok mới cài đặt
  2. Tôi đánh dấu vào "Kích hoạt chú thích"
  3. Tôi đã chọn "Lấy bộ xử lý từ đường dẫn dự án" trong cùng một trang

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.