Annotation Processingをdebugする(Java Project編)

Annotation Processingを使ってコンバイル時に処理をする際にDebugする方法をまとめておきます。 AbstractProcessorを継承したクラスをDebugモードで実行します。 前提としてIntelliJを使用しています。

mavenの場合

https://stackoverflow.com/questions/31345893/debug-java-annotation-processors-using-intellij-and-maven ここに書いてあるまま行うとできます。

IntelliJ上でRun > Edit Configuration Remoteを選択し以下のように新たなConfigurationを作ります。

f:id:chiiia12:20180629193626j:plain

ターミナル上で pom.xml のあるディレクトリで

mvnDebug clean install -e

を実行します。 IntelliJに戻ってDebug対象のクラスにブレイクポイントを打ち、先程作ったRun ConfigurationをDebug実行すると、ブレイクポイントで実行が止まりいつも通りデバッグできます。

gradleの場合

https://stackoverflow.com/questions/8587096/how-do-you-debug-java-annotation-processors-using-intellij こちらのNo.13のコメントを参考にしました。

app:compileDebugJavaWithJavacのタスクを実行している記事が多いですが今回のプロジェクトにはcompileDebugJavaWithJavacのタスクは存在しないので以下のやり方で実行します。

mavenと同じようにRun > Edit Configurationから 以下のようなConfigirationを作成します。

f:id:chiiia12:20180629193645j:plain

プロジェクト構成は以下の通りです。

tostring(root)
- processor
- user

ターミナル上のbuild.gradleのあるディレクトリ(プロジェクトのルート)で

./gradlew --no-daemon -Dorg.gradle.jvmargs='-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=5005,suspend=y' :processor:clean :user:compileJava  :processor:compileJava

を実行します。 後はIntelliJに戻って先程のConfigurationをDebug実行するとブレイクポイントで止まります。

繰り返し行おうとブレイクポイントで止まらずにタスクが終了してしまうことがありますが、

./gradlew clean

cleanしてからもう一度行うと再度デバッグできるようです。