鹏叔(https://pengtech.net)

导航

如何Maven结合IDEA进行Debug

介绍

由于Idea和Maven class loading的规则不同, 同样的测试使用Maven运行和使用Idea运行可能会得到不同的结果。 而我们的CI(持续集成)往往是使用maven 命令去运行的。
在此情况下, 将测试使用maven运行起来, 然后结合IDEA强大的debug能力就显得非常必要。如果熟练掌握此种debug方式, 也可以减少我们依赖idea进行编译,更新index这些极其耗时的工作。

创建一个测试

假设我们已经创建了一个工程maven_debug, 并且创建了一个测试类MySuperClassTest

启动mmaven测试并运行在debug模式

mvn -Dtest=MySuperClassTest -Dmaven.surefire.debug test
  • JVM参数 -Dmaven.surefire.debug即表示将测试运行在debug模式下
  • 这时maven将会首先编译测试,然后启动测试,并等待IDE接入debug模式, 此时我们要配置IDEA运行一个remote JVM debug进程, 接入mvn debug.
  • 通常情况下, 测试将会监听在5005端口。

配置remote JVM debug模板

  • 打开idea, 从以下路径 打开remote JVM debug配置界面 run-> edit configurations-> Edit configuration templates -> remote JVM debug
  • 修改或检查command line arguments for remote JVM 中的端口和其他参数正确, 端口即为上一步mven debug监听的端口, 默认为5005
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
  • 确保host参数正确, transport参数正确
  • 参数都填写正确后, 点击appy按钮保存修改, 这一步完成,代表我们的 remote JVM debug模板配置完成, 接下来我们需要基于此模版, 创建一个进程去连接maven测试。

启动remote JVM debug进程

打开run/debug configuration界面, 路径run-> edit configurations
点左上角+按钮, 在弹出的选择框中, 选择remote JVM debug模板,创建一个run/debug配置,点击apply保存。
此时在tools bar run/debug下拉列表就可以看到新创建的run/debug 配置, 单击即可启动此该remote JVM debug进程

设置断点

在IDEA中设置断点, 当程序运行到断点位置就会停下。

其他

如果你需要debug一个maven插件 那么需要使用另外一个maven命令mvnDebug

mvnDebug -Dtest=MySuperClassTest test

mvnDebug 默认监听在8000端口, 需要启动一个remote JVM debug进程连接其8000端口, 这样即可在IDEA中debug maven插件。

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000

参考文档

How to Debug a Test Run with Maven

Run Maven tests with -Dmaven.surefire.debug and -DforkMode=never

posted on 2021-12-22 15:53  eagle.supper  阅读(1299)  评论(0编辑  收藏  举报