2016-10-24 7 views
3

thisのドキュメントに従って、プロジェクトにレルムを設定しているとき。レガントプラグインでダガービルドが失敗し、シンボルクラスが見つかりません。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" 
} 

アプリレベルの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 


} 
+0

:だからプラグインラインは、その後に復元する必要があります$ DAGGER_VERSION "' ...また、 '' annotationProcessor'の代わりに 'apt'を使う傾向があります。 – EpicPandaForce

+0

私はすでにcom.google.daggerを使用しています:dagger-compiler:$ DAGGER_VERSIONあなたは私にannotationProcessorの依存関係を提案できますか? –

+0

Dagger設定がどこかで失敗した場合は、とにかく 'シンボルクラスDaggerApplicationComponent'を見つけることができません。最後にコンソールがあなたに与える正確なエラーを見てください。 – EpicPandaForce

答えて

2

これはダガー2の最も重大な欠点の一つである - そのエラー報告はひどいです。私はこの種のエラーを定期的に観察し、そのメッセージから何かを理解することはできません。

問題は、Dagger 2プリプロセッサがjavacのコンパイルより前に実行され、コードを処理できなかった場合、コンポーネント実装を生成せずにプリプロセッサが失敗することです。私の知る限りでは、プリプロセッサはエラーの原因となったエラーを報告しません。その後、javacコンパイルが実行されると、生成されたファイルが見つからないために失敗しますが、他のファイルのコンパイルには進まないため、Daggerコンポーネントが見つからないという唯一のエラーが表示されます。

  1. レビューVCS履歴と変更されたすべてのファイルを参照してください。私はこのような場合に何

    は3ソリューションを強化です。 IDEは訪問時に各ファイルをコンパイルするので、コンパイルエラーがあるかどうかがわかります。

  2. #1が役に立たなかった場合、私はプロジェクトからDagger 2コードをインクリメンタルに削除しようとします(あらかじめコミットしてください)。途中で再コンパイルを試みます。 Dagger 2が問題のある領域から削除されると、Daggerコンポーネントが生成され、javac comilationが実際のエラーを表示します。
  3. 他に何も役立たない場合、私はすべてのプロジェクトファイルを1つずつ訪問しています。もう二度それをやったことがあります。それは悪夢です。

私はRealmについては何も知らないが、独自のプラグインを使用しているので、プラグインアプライアンスの順序をbuild.gradleに変更することから始めることができます。

apply plugin: 'com.neenbedankt.android-apt' 
apply plugin: 'realm-android' 
+1

上記のように「apply plugin」行を切り替えると、私の場合の根本的なエラーを識別することができました。レルム2.x. – HolySamosa

+1

これらの行を切り替えるとDaggerがクラスを生成できないRealmエラーを特定できましたが、エラーを修正した後、行の順序を復元する必要がありました(Realm注釈は処理されません)。 – HolySamosa

0

この回答は、Vasiliyの以前の回答に基づいています。私は私のために働く解決策をより目立たせるために、彼/彼女の答えに私のコメントを宣伝しています。

Vasiliyは、これらの行を反転、示唆したように:

apply plugin: 'realm-android' 
apply plugin: 'com.neenbedankt.android-apt' 

apply plugin: 'com.neenbedankt.android-apt' 
apply plugin: 'realm-android' 

は、私の場合には(自分のアプリケーション・コンポーネント・クラスを生成するからダガーを防止し、基礎となるレルムエラーの報告を可能にRealm 2.xで導入された最新の変更)。必要に応じてレルムの注釈が処理されていない、

java.lang.IllegalArgumentException: XXX is not part of the schema for this Realm 

プラグインを並べ替えることによって:私はこのエラーを受け取った並べ替えapply plugin線で、この問題に対処した後

。短剣-コンパイラ:代わりに `" com.google.daggerの `:あなたは` "::短剣-compilr $のDAGGER_VERSION com.google.dagger" を書いたためです

apply plugin: 'com.neenbedankt.android-apt' 
apply plugin: 'realm-android' 
関連する問題