2017-07-20 16 views
6

tôi nhận được báo lỗi như vậy trong thời gian xây dựng:kapt không giải quyết được các lớp học protobuf tạo

e: /Users/some/path/SomeClass.java:86: error: cannot find symbol 
e:  
e:  static ConnectionType getConnectionType(Context context) { 
e:   ^
e: symbol: class ConnectionType 
e: location: class SomeClass 

đâu ConnectionType là lớp được tạo ra bởi protobuf. Vì vậy, có vẻ như kapt không giải quyết các lớp được tạo ra.

Tôi đã thử gì?

Lúc đầu, tôi nói thêm kotlin-apt plugin:

apply plugin: 'kotlin-kapt' 

Sau đó, tôi đã thêm lớp brotobuf tạo để thiết lập nguồn:

sourceSets { 
    main.java.srcDirs += 'src/main/kotlin' 
    main.java.srcDirs += 'build/generated/source/proto/main/java' 
} 

Và tôi cũng muốn có các lớp học được tạo ra trước khi kapt bắt nó làm việc . Vì vậy, tôi đặt hàng các công việc theo cách này theo cách này:

afterEvaluate { 
    def protoTasks = [] 
    tasks.each { task -> 
     if (task.name.contains('proto') || task.name.contains('Proto')) { 
      protoTasks.push(task) 
     } 
    } 

    tasks.each { task -> 
     if (task.name.startsWith('kapt')) { 
      task.dependsOn protoTasks 
     } 
    } 
} 

Nhưng tất cả những điều này không giúp ích gì, tôi vẫn gặp lỗi tương tự. Làm thế nào để giải quyết nó?

+0

Bạn có chắc chắn rằng các lớp được tạo ra? Vì vậy, bạn có thể thấy tệp 'class' cho ví dụ: 'ConnectionType' trong thư mục lớp-đầu ra của bạn? – guenhter

+0

@guenhter Tôi chỉ có thể xem các tệp '.java' chứ không phải tệp' .class'. – VasyaFromRussia

+0

Bạn có thể xem tệp 'SomeClass.class' của lớp học không? – guenhter

Trả lời

1

Lỗi được gây ra bởi đường dẫn sai đến tập hợp nguồn protobuf. Tôi đã phải sử dụng tên hương vị đúng trong nó, như:

sourceSets { 
    // ... 
    main.java.srcDirs += 'build/generated/source/proto/flavor/java' 
} 

thay vì

sourceSets { 
    // ... 
    main.java.srcDirs += 'build/generated/source/proto/main/java' 
} 
Các vấn đề liên quan