用惯了 IntelliJ IDEA debug 功能,你知道如何在 IntelliJ IDEA 上调试 maven 插件吗?
哈哈哈,那就是这篇文章准没错了。
1、准备源码
准备你想要进行 debug 的 maven 插件的源代码,我这里以 maven-enforcer-plugin
为例子
git@github.com:apache/maven-enforcer.git
# 基于 enforcer-3.1.0 tag 的源代码创建本地分支 v3.1.0
git checkout enforcer-3.1.0 -b v3.1.0
2、打开 maven 的 debug 模式
打开 maven 的 debug 模式很简单,你只需要把平时执行的 mvn 命令替换为 mvnDebug 命令即可触发。
如
mvnDebug clean compile org.apache.maven.plugins:maven-enforcer-plugin:3.1.0:enforce -Drules=org.apache.maven.plugins.enforcer.AlwaysPass
替换为
mvnDebug clean compile org.apache.maven.plugins:maven-enforcer-plugin:3.1.0:enforce -Drules=AlwaysPass
然后在另一个由 maven 管理项目下执行被替换后的命令即可。
执行完 mvnDebug 命令后Terminal
窗口会有如下的提示信息
Preparing to execute Maven in debug mode
Listening for transport dt_socket at address: 8000
这个时候说明 maven 此时已经处于 debug 模式下了,它在 8000 这个端口上监听连接。
3、打断点
将 「1、准备源码」中准备的源代码导入 IntelliJ IDEA 中。
在你需要进行 debug 的 maven plugin 的源代码中打上断点
比如我要对 maven-enforcer 的 AlwaysPass 进行 Debug 来了解它的运行机制,就会在 AlwaysPass.class
这个类上打断点。
4、配置 Remote JVM Debug
在 IDEA 中为 maven-enforcer 源代码这个项目配置远程 Debug
整个过程如下
在工具栏里找到「Add Configuration…」的入口
点击左上角的「+」
选择「Remote」
特别需要注意如下的配置,也就是上图中圈红的部分。
Name:Unnamed
Host:localhost
Port:5005
基于实际情况修改
# 你随意
Name:debug-enforcer-rules
# 本地 debug ,填 localhost 或者 127.0.0.1
Host:localhost
# 这个必须要和「2、打开 maven 的 debug 模式」 中 maven debug 模式监听的端口一致
Port:8000
到这里你就做好了调试 maven 插件的全部准备工作。
5、开始调试(debug)
你只需要点击 IntelliJ IDEA 工具栏上的绿色的 bug 图标对应的按钮,即可开始调试 maven 插件的源代码。
点击完 IntelliJ IDEA 工具栏上的绿色的 bug 图标对应的按钮后,可以观察 IntelliJ IDEA 的 Console
窗口
当你看到
Connected to the target VM, address: ‘localhost:8000’, transport: ‘socket’。
这代表 debug 的客户端和服务端通信连接建立完成。
然后很快可以看到方法执行的流程进入到设定的断点处。
对,就是这样,有经验的同学会觉得很简单,对于新人来说还是有点门槛的。
最后
前前后后也有过几次用 mvnDebug 来调试 maven 插件的经历了,有时候常常会忘记如何设置。
好记性不如烂笔头,今天就记录下吧,以备不时之需。
也希望能给你也带来帮助。