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を作ります。
ターミナル上で 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を作成します。
プロジェクト構成は以下の通りです。
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してからもう一度行うと再度デバッグできるようです。