簡體   English   中英

Dagger構建失敗,帶有realm插件,無法找到符號類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組件。

在這種情況下我做的是三步解決方案:

  1. 查看VCS歷史記錄並訪問所有已更改的文件。 由於IDE在訪問時編譯每個文件,我將看其中是否有任何編譯錯誤。
  2. 如果#1沒有幫助,我會嘗試從項目中逐步刪除Dagger 2代碼(事先提交!)並嘗試重新編譯。 當Dagger 2從有問題的區域移除時,將生成Dagger組件, javac編譯將顯示實際錯誤。
  3. 如果沒有其他幫助,我將逐個訪問所有項目文件。 已經完成了兩次,這是一場噩夢。

我對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM