Help us understand the problem. What is going on with this article?

IntelliJ IDEA / Gradle 環境の Java プロジェクトで Dagger 2 (Google Dagger) を使う方法メモ

More than 3 years have passed since last update.

Android プロジェクトで Dagger 2 を使う方法についてはいろいろ情報があるけど、Android じゃない Java プロジェクトの情報はあんまりなくて一筋縄ではいかなかったのでメモ。 もっといい方法があれば教えて欲しい。


アノテーションプロセッシングの処理のために Gradle の net.ltgt.apt プラグイン を使う。 (このプラグインを使わない方法もあると思うけど試してない。) 基本はこのプラグインのドキュメントに書いてある通りで良い。


  • IntelliJ IDEA 2016.2.5
  • Gradle 2.13
  • Dagger 2.6
  • Gradle net.ltgt.apt プラグイン 0.9


単純に Gradle プロジェクトで使う場合

以下のような build.gradle を書けばよい。

plugins {
    id 'java'
    id "net.ltgt.apt" version "0.9"

sourceCompatibility = 1.8
targetCompatibility = 1.8

def defaultEncoding = 'UTF-8'
tasks.withType(JavaCompile)*.options*.encoding = defaultEncoding

repositories {

dependencies {
    compile ''
    apt ''
    // テストの方でも Dagger を使ってるならこれも必要。
    testApt ''

IntelliJ IDEA で動かす場合

以下のことをすればうまく動く。 (net.ltgt.apt プラグインのドキュメントに書いてある通り。)

  • Gradle idea プラグインを使用する。 (idea プラグインを使わない場合は追加の設定が必要。 後述する。)
  • IntelliJ IDEA 2016.1 以降を使っている場合、プロジェクトを IntelliJ IDEA にインポートする際に 「Create separate module per source set」 のチェックを外すこと。
  • 設定の 「Annotation Processors」 のページ (「Settings…」 → 「Build, Execution, Deployment」 → 「Compiler」 の中) で次のことを行う。
    • 「Enable annotation processing」 にチェックを付ける。
    • 「Obtain processors from project classpath」 を選択。
    • Gradle 単体の挙動にあわせて、生成先ディレクトリを以下のように設定する。 (これをすることで生成された。)
      • 「Store generated sources relative to」 を 「Module content root」 に。
      • 「Production sources directory」 を 「build/generated/source/apt/main」 に。
      • 「Test sources directory」 を 「build/generated/source/apt/test」 に。

Gradle の idea プラグインを適用しない場合

idea プラグインを適用しなくても動くのだけど、その場合は以下のような変更が必要だった。

  • configuration は apt じゃなくて compileOnly を使わないとダメそう。
    • コンパイル時の依存に含めないでいいものだから本来は apt にすべきではあるのだけど。
  • アノテーションプロセッシングの出力先ディレクトリを Java のソースフォルダとして追加しよう。
    • そうしないと 「ビルドはできるのにソースコード上で Dagger により生成されたクラスが見つからない」 という状態になる。
    • 「Project Structure…」 の 「Project Setting」 → 「Modules」 にて、ソースディレクトリにアノテーションプロセッシングの出力先ディレクトリを追加。


Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away