假设我们这里是开发一个按照如下方式依赖的annotationProcessor
// app模块build.gradle
annotationProcessor project(":router-compiler")
调试该插件需要做两件事情
- 以debug方式启动gradle task
- 连接到debugger
调试模式启动gradle task
在终端中按照如下方式启动即可,正常情况下编译会停住,等待debugger连接
./gradlew assembleDebug -Dorg.gradle.daemon=false -Dorg.gradle.debug=true
此时可能会出现如下错误,提示端口被占用
Please read the following process output to find out more:
-----------------------
ERROR: transport error 202: bind failed: Address already in use
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:750]
解决方式是结束占用端口的进程,同时可以停止其它在运行的gradle deamon以避免干扰
[wangxue@wangxue-mac] Router$ lsof -i:5005
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 4354 wangxue 4u IPv4 0xc7ff8f48c51926d 0t0 TCP *:avt-profile-2 (LISTEN)
[wangxue@wangxue-mac] Router$
[wangxue@wangxue-mac] Router$ kill 4354
[wangxue@wangxue-mac] Router$ ./gradlew --stop
Stopping Daemon(s)
1 Daemon stopped
连接调试器
打开Edit Configurations窗口,添加remote类型配置
简单修改一下名称,同时可以选择Use module classpath为插件所在的模块,其它不用修改,点击OK保存。
选择配置为刚才新建的plugin,点击工具栏中的调试按钮即可连接调试器,之后gradle编译任务会继续运行,在插件代码中的断点也可以正常停住了。