web-dev-qa-db-ja.com

gradlew + daggerを使用した@Generatedアノテーション

私はgradlew(4.10.2)+ dagger(2.18)を使用して奇妙な問題に直面しています。

問題は私が電話したときです:

./gradlew :app:compileDebugAndroidTestKotlin 

ビルドが失敗します:

タスク:Common:compileDebugJavaWithJavacが失敗しました

/CommonModule_ProvidesGsonFactory.Java:6:エラー:パッケージjavax.annotation.processingが存在しませんimport javax.annotation.processing。Generated;

/CommonModule_ProvidesGsonFactory.Java:8:エラー:シンボルが見つかりません@Generated

しかし、タスクを実行すると from Android Studio の場合、タスクは成功し、@Generatedは失敗します短剣生成クラスに存在します。

@Generatedを使用した./gradlewアノテーションを回避するためのヒントはありますか?

14
crgarridos

ダガーはauto-commonGeneratedAnnotationsは、どの@Generated使用する注釈。これは、クラスパスに基づいて行われます。

これは、アノテーションプロセッサの実行中にjavax.annotation.processing.Generatedは使用可能であり、ジェネレーターで使用されますが、結果のファイルが別のタスクでコンパイルされると、クラスパス上に存在しなくなります。

考えられる原因は、新しいバージョンのJDKを使用してコードが生成され、インクリメンタルビルドが無効であり、完全な「クリーン&再ビルド」が必要であるか、Java言語レベルに問題がある注釈プロセッサはJava 9+で実行されますが、AndroidはJava 8以下としてコンパイルされます。

2
Kiskae