[英]Dagger 2, sometimes on compiling I get "cannot find symbol class DaggerApplicationComponent"
[英]Dagger build fails with realm plugin, Cannot find symbol class DaggerApplicationComponent
通過遵循此文檔在項目中設置領域。
下面是我的項目級別gradle:
buildscript {
repositories {
jcenter()
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
// Realm
classpath "io.realm:realm-gradle-plugin:1.2.0"
}
app level gradle:
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'realm-android'
dependencies {
final DAGGER_VERSION = '2.7'
....
def daggerCompiler = "com.google.dagger:dagger-compiler:$DAGGER_VERSION"
annotationProcessor daggerCompiler
testAnnotationProcessor daggerCompiler
androidTestAnnotationProcessor daggerCompiler
compile "com.google.dagger:dagger:$DAGGER_VERSION"
provided 'org.glassfish:javax.annotation:10.0-b28' //Required by Dagger2
}
這是Dagger 2最嚴重的缺點之一 - 它的錯誤報告非常糟糕。 我經常觀察到這些錯誤,你無法理解那條消息。
問題是Dagger 2預處理器在javac
編譯之前運行,如果代碼無法處理,那么預處理器就會失敗而不會生成組件實現。 據我所知,預處理器不會報告導致失敗的錯誤。 然后,當執行javac
編譯時失敗,因為它無法找到生成的文件,但它不會繼續編譯其他文件,因此您看到的唯一錯誤是缺少Dagger組件。
在這種情況下我做的是三步解決方案:
javac
編譯將顯示實際錯誤。 我對Realm一無所知,但是因為我看到它使用了自己的插件,所以你可以先改變build.gradle
中插件設備的build.gradle
。 切換這些行:
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'realm-android'
這個答案是基於Vasiliy之前的回答。 我正在向他/她的回答宣傳我的評論,以便使對我有用的解決方案更加明顯。
正如Vasiliy建議的那樣,扭轉這些界限:
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'realm-android'
至
apply plugin: 'realm-android'
apply plugin: 'com.neenbedankt.android-apt'
允許報告一個潛在的Realm錯誤,這個錯誤阻止了Dagger生成我的應用程序組件類(在我的例子中,Realm 2.x中引入了一個重大變化)。
解決此問題后,使用重新排序的apply plugin
行我收到此錯誤:
java.lang.IllegalArgumentException: XXX is not part of the schema for this Realm
通過重新排序插件,不會根據需要處理Realm注釋。 因此,必須將插件行恢復為:
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'realm-android'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.