Не удается отладить процессор аннотаций при использовании kapt и gradle


Я создаю процессор аннотаций, и недавно я переключился с использования стандартного типа аннотационного процессора на kapt, используя плагин kotlin-kapt.

Я отлаживал свой процессор с помощью команды

./gradlew --no-daemon -Dorg.gradle.debug=true :app:clean :app:compileDebugJavaWithJavac

(полные инструкции здесь: https://stackoverflow.com/a/42488641/502463 )

, а затем запуск конфигурации удаленной отладки. Когда я использовал annotationProcessor, я мог нажимать точки останова и отлаживать нормально. с kapt мой процессор работает, но я не могу отладьте его. Точки останова не срабатывают.

Моя версия kotlin-1.1.2-3

2 3

2 ответа:

На самом деле вы хотите отладить демон компилятора Kotlin, а не демон Gradle. Вот как можно передать требуемые аргументы JVM:

./gradlew <tasks> -Dkotlin.daemon.jvm.options="-Xdebug,-Xrunjdwp:transport=dt_socket\,address=5005\,server=y\,suspend=n"

Другой ответ в целом верен, но я нашел https://medium.com/@daptronic/annotation-processing-with-kapt-and-gradle-237793f2be57 полезно для более детального рассмотрения.

Вы можете запустить что-то вроде этого

./gradlew --no-daemon clean compileDebugKotlin -Dkotlin.daemon.jvm.options="-Xdebug,-Xrunjdwp:transport=dt_socket\,address=5005\,server=y\,suspend=n"

Или если вы хотите запустить определенный модуль

./gradlew --no-daemon :modulename:clean :modulename:compileDebugKotlin -Dkotlin.daemon.jvm.options="-Xdebug,-Xrunjdwp:transport=dt_socket\,address=5005\,server=y\,suspend=n"

Хитрая часть

На самом деле нам нужно дождаться начала задачи компиляции Kotlin, прежде чем мы подключим отладчик, он не останавливается и не ждет, пока вы прикрепите отладчик, как с java.

Итак, вы хотите отслеживать свою сборку и искать задачу: :app:kaptDebugKotlin И когда вы увидите его, сразу же перейдите к IDE и нажмите кнопку отладка на удаленной конфигурации. Если вы не приложите вовремя, задача будет просто двигаться дальше. У вас есть несколько секунд, чтобы понять это, но это немного гонка, чтобы заставить все это работать.

Это заняло у меня удручающе много времени, чтобы понять и начать работать. Теперь, как только я выполняю команду, я просто иду к IDE и помять кнопку отладчика, и мне очень повезло, что он прикрепился таким образом.