使用kapt和gradle时,无法调试注释处理器

我正在构建一个注释处理器,最近我使用kotlin-kapt插件将默认的annotationProcessor类型转换为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

你实际上想调试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有助于进入更多的细节&#x3002;

你可以运行这样的东西

./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编译任务开始,然后再附加调试器,它不会暂停并等待您像调试器一样附加调试器。

所以你想监视你的构建,并寻找任务:: :app:kaptDebugKotlin当你看到它,马上转到你的IDE,并打你的远程配置调试。 如果你没有及时加入,这个任务就会继续下去。 你有几秒钟的时间来搞清楚,但是要完成所有的工作,这是一场比赛。

这让我花了很长时间才弄清楚并开始工作。 现在,只要我运行命令,我只是去IDE和捣毁调试器按钮,我已经有很好的运气得到它附加的方式。