Dagger 2.0 - AppEngine - gradle 配置

Dagger 2.0 - AppEngine - gradle configuration

我正在尝试在 AppEngine 项目中从 Dagger 1.2.2 迁移到 Dagger 2.0.1(不是 Android 一个)。

使用 Dagger 1.2.2 简单:

compile 'com.squareup.dagger:dagger-compiler:1.2.2'
compile 'com.squareup.dagger:dagger:1.2.2'

成功了。

使用 Dagger 2.0.1:

compile 'com.google.dagger:dagger-compiler:2.0.1'
compile 'com.google.dagger:dagger:2.0.1'

不起作用(生成源代码但与 build/classes/main/..package../ 中的 *.class 文件混淆)。

我找到了解决办法。

https://github.com/tbroyer/gradle-apt-plugin

buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath "net.ltgt.gradle:gradle-apt-plugin:0.3"
  }
}

apply plugin: "net.ltgt.apt"

dependecies {
  apt 'com.google.dagger:dagger-compiler:2.0.1'
  compile 'com.google.dagger:dagger:2.0.1'
}

此外,如果您使用的是 Intellij,建议使用以下配置:

When using the Gradle integration in IntelliJ IDEA however, rather than the idea task, you'll have to manually enable annotation processing: in Settings… → Build, Execution, Deployment → Compiler → Annotation Processors, check Enable annotation processing and Obtain processors from project classpath. To mimic the Gradle behavior and generated files behavior, you can configure the production and test sources directories to build/generated/source/apt/main and build/generated/source/apt/test respectively and choose to Store generated sources relative to: Module content root.

我还必须从整个构建目录中删除 Exclude 并将 generated/source/apt/main 目录标记为源。

你也可以不使用 net.ltgt.apt 插件,(顺便说一下,这可能与 lombok 冲突)。

apply plugin: 'java'
apply plugin: 'idea'

def generatedMain = new File(buildDir, "generated/main")

compileJava {
    doFirst {
        generatedMain.mkdirs()
    }
    options.compilerArgs += ['-s', generatedMain]
}
idea.module.sourceDirs += generatedMain

dependencies {
    compileOnly 'com.google.dagger:dagger-compiler:2.8'
    compile 'com.google.dagger:dagger:2.8'
}