how do you debug java annotation processors using intellij?

后端 未结 8 976
春和景丽
春和景丽 2020-12-07 13:47

How do you debug java annotation processors using intellij?

Preferably using IDEA IntelliJ. I tried setting a breakpoint inside the processor and running but it did

8条回答
  •  情书的邮戳
    2020-12-07 14:24

    This tutorial is written for an Android project. Main module name is "app" as usual. The project contains a submodule called "annotation" which is subdependency of "app". "app" module runs annotation processing with gradle declaration apt project(':annotation') .

    SIMPLE VERSION (run compilation from terminal and attach from IDE)

    1. [REQUIRED] Add a new project configuration "+" -> "Remote". Check "Single instance only". All other settings are generated automatically. Leave as the classpath. Port should be left as the default 5005.

    1. [REQUIRED] Make sure you stop all gradle instances by calling: ./gradlew --stop
    2. [REQUIRED] Run the command : ./gradlew --no-daemon -Dorg.gradle.debug=true :app:clean :app:compileDebugJavaWithJavac

    1. Run the APT project configuration in debug mode as fast as possible :)


    1. [HINT] We start with an EMPTY gradle.properties file
    2. [HINT] DO NOT USE gradle daemon ( --no-daemon / org.gradle.daemon=false option )
    3. [HINT] Run gradle in debug mode ( org.gradle.debug=true option )
    4. [HINT] Run app's module compilation not the processor's module compilation (app's compilation runs annotation processing!)
    5. We DO NOT normally add any Java compiler settings in Android Studio (i.e. File -> other settings -> Default settings)

    EXTENDED VERSION (use gradle.properties)

    1. Add the following to your gradle.properties file:
    
        org.gradle.daemon=false
        org.gradle.debug=true
    
    
    1. Run the compilation from terminal:

    ./gradlew :app:clean :app:compileDebugJavaWithJavac


    ADVANCED VERSION (just press debug in IDE)

    1. Add a bash script to your project main dir (e.g. compile.sh)
    #!/bin/bash
    ./gradlew :app:clean :app:compileDebugJavaWithJavac &
    

    Remember about the '&' sign for background processing.

    1. Go to APT configuration settings we created in step 1 and add a Before launch configuration. Select Run external tool.

    1. Add the path to the compile.sh script we created earlier.


    Warning

    Messing up gradle compilation, NullPointer exceptions during compilation etc. sometimes result in AndroidStudio being stuck (frozen on gradle refresh stage). If you cannot stop gradle from the IDE then use this command in the terminal:

    ps -A | grep gradle | awk '{ print $1; }' | xargs kill -9
    

    Turning off debug option during project refresh sometimes helps Android Studio to come back to the right track.

提交回复
热议问题