2015-01-15 35 views
19

Khi tôi tạo ra một lớp Java mới với một hoặc nhiều lĩnh vực và đính kèm các @AllArgsConstructor chú thích từ Lombok với nó, sau đó tôi nhận được tin nhắn nàyAllArgsConstructor từ Lombok không được tìm thấy bởi Android Studio

Error:(9, 1) error: cannot find symbol class ConstructorProperties

từ trên bảng điều khiển Gradle Build. Tôi đã có thể tái tạo điều này bằng cách tạo một dự án Android trống mới với cấu hình này.

The Class (không bao giờ sử dụng hoặc khởi tạo)

@lombok.AllArgsConstructor 
public class Model { 
    int foo; 
    String bar; 
} 

build.gradle:

dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
compile 'com.android.support:appcompat-v7:21.0.3' 
provided 'org.projectlombok:lombok:1.14.8' 
} 

@Getter@Setter từ Lombok không gây ra bất kỳ vấn đề và thậm chí cả @NoArgsConstructor không được đề cập bởi gradle, như vậy là AllArgsConstructor nếu không có trường nào.

Đây có phải là lỗi từ Lombok hoặc là lỗi này nằm ở phía trước màn hình không?

Trả lời

41

Lombok tạo ra @ConstructorProperties theo mặc định cho tất cả các nhà xây dựng được tạo. Trên Android, chú thích đó không khả dụng. Như đã đề cập trong documentation nó có thể ngăn chặn các thế hệ bằng một trong hai cách xác định suppressConstructorProperties=true cho mỗi @XxxArgsConstructor, hoặc bằng cách sử dụng dòng sau ở một mức độ cao lombok.config file:

lombok.anyConstructor.suppressConstructorProperties = true 

Tiết lộ: Tôi là một nhà phát triển Lombok

+1

Hey Roel. Tôi có cùng một vấn đề (tôi mới với lombok). Tôi đang sử dụng bản xem trước Android Studio 1.3 4, plugin lombok1.12.6 và lombok 0.9.4.14. Trong dự án gốc của tôi, tôi có một tập tin lombok.conifg với hai dòng: 'lombok.anyConstructor.suppressConstructorProperties = true' và' config.stopBubbling = true'. Nhưng tôi vẫn nhận được lỗi tương tự như Ohem. Bạn có thể giúp tôi không? –

+1

AFAIK, Android Studio dựa trên IntelliJ. Có thể là plugin IntelliJ, được phát triển bởi một nhà phát triển khác, chưa hỗ trợ hệ thống cấu hình. –

+1

Aah tôi hiểu rồi.Vì vậy, tôi đoán cách duy nhất là thêm một cách rõ ràng '@AllArgsConstructor (suppressConstructorProperties = true)' phải không? Btw, làm việc rất tốt với lombok. Tiếp tục theo cách này;) –

25

Bạn cần phải thêm đàn áp trong AllArgsConstructors của bạn. Nếu bạn không muốn thêm một tập tin cấu hình mới, bạn chỉ có thể làm điều này:

@AllArgsConstructor(suppressConstructorProperties = true) 

Tiết lộ: Tôi không phải là một nhà phát triển Lombok: D

+8

Yêu thích tiết lộ của bạn :-) –

+0

tiết kiệm thời gian của tôi, cảm ơn –

0

Ngoài ra:

Nếu bạn nhắm mục tiêu Java 8 trong dự án Android của bạn (ví dụ bằng cách sử dụng retrolambda) lỗi này sẽ không xuất hiện.

0

@AllArgsConstructor(suppressConstructorProperties = true) giải pháp không hoạt động nữa. Nếu bạn thử điều này, bạn nhận được thông tin sau:

Tính năng không được hỗ trợ này không còn được hỗ trợ. Gỡ bỏ nó; bạn có thể tạo tệp lombok.config với 'lombok.anyConstructor.suppressConstructorProperties = true'.

Giải pháp làm việc đang thêm lombok.anyConstructor.suppressConstructorProperties = true đến lombok.config tệp.

Các vấn đề liên quan