Dagger2を使う時に微妙にハマった

Dagger で自動生成されるはずのクラスがないという問題に遭遇した。

動くものを Gist に上げました。

環境

  • IntelliJ IDEA 2018.1.5
  • Gradle 4.4

詳細

以下の 公式 の記述を試しても動かなかった (何か自分が間違っている可能性もある

// Add plugin https://plugins.gradle.org/plugin/net.ltgt.apt
plugins {
  id net.ltgt.apt version 0.10
}

// Add Dagger dependencies
dependencies {
  compile com.google.dagger:dagger:2.x
  apt com.google.dagger:dagger-compiler:2.x
}

out/production/classes/generated に何もないので、
アノテーションプロセッサーがうまく動いていない感があった。

設定を確認したところ、 AnnotationProcessor が無効になっていたため 有効 にした。
※ [Build, Execution, Deployment] -> [Compiler] -> [Annotation Processors] ->
Enable annotation processing を有効に。

… が解決せず。

再度公式のGitHub を見た所、maven の記述 のdagger-compiler に provided の指定が見つかった。

gradle の記述的にも古いので、以下の通りにしたら 動いた
※ compileOnly は provided の新しい記述方法

plugins {
    id java
}

dependencies {
    implementation com.google.dagger:dagger:2.16
    compileOnly com.google.dagger:dagger-compiler:2.16
}

無事に 生成された。 …が。

Dagger により作られたクラスが参照できない

こちらは、Annotation Processor により作られるクラスの出力先を、ソースディレクトリ内に 変更することにより解決した。
※ 画像の [Module content root] を選択

マークも変えましょう。
[generated 右クリック] -> [Mark Directory as] -> [Generated Source Root]

最後に

Dagger 楽しみたい。

Atsumi3

したいことをします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.