Annotation Processor in IntelliJ and Gradle

UPDATE 2.2019
since Gradle 5.2 there is an easy way to do it - see gavenkoas answer

UPDATE 5.2018

The easiest way, I know of is to use the apt-idea plugin

Just activate the plugin in the build.gradle file:

plugins {
    id 'java'
    id 'net.ltgt.apt-idea' version "0.15"
}

and then add the annotation processors to the annotationProcessor configuration:

final DAGGER_VER = '2.16'
dependencies {
    implementation "com.google.dagger:dagger:${DAGGER_VER}"
    annotationProcessor"com.google.dagger:dagger-compiler:${DAGGER_VER}"
}

Test-project on GitHub: ex.dagger
(using IntelliJ 2018.1.4, Gradle 4.7)

ORIG ANSWER

There's a simple workaround using the parent-dir which works fine in IntelliJ 2016.3.4

  • Production sources directory: ../main
  • Test sources directory: ../test

Now gradle and IntelliJ will generate the code to the same directories.

Fixed in GitLab project V0.0.2

see also: apt-gradle-plugin issue#35


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

The goal of this plugin was to eventually no longer be needed, being superseded by built-in features. This is becoming a reality with Gradle 5.2 and IntelliJ IDEA 2019.1.

So:

dependencies {
  compile("com.google.dagger:dagger:2.18")
  annotationProcessor("com.google.dagger:dagger-compiler:2.18")

  compileOnly("com.google.auto.factory:auto-factory:1.0-beta6")
  annotationProcessor("com.google.auto.factory:auto-factory:1.0-beta6")

  compileOnly("org.immutables:value-annotations:2.7.1")
  annotationProcessor("org.immutables:value:2.7.1")
}

compileOnly is necessary if you use annotations, compile if you use classes, annotationProcessor introduced in Gradle 4.6.

To enable processing specific compile task:

compileJava {
    options.annotationProcessorPath = configurations.annotationProcessor
}

To disable:

  compileTestJava {
      options.compilerArgs += '-proc:none'
  }