📜  未知的生命周期阶段“.surefire.debug”. - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:40:19.287000             🧑  作者: Mango

未知的生命周期阶段".surefire.debug" - Shell-Bash

概述

在Shell-Bash中,开发者经常使用Maven构建项目。然而,有些情况下构建失败,这时候我们需要debug(调试)才能找到问题所在。而当我们通过命令 mvn test 运行测试时,有时会遇到以下信息提示:

[INFO] --- maven-surefire-plugin:2.22.0:test (default-test) @ your-project ---
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-surefire-plugin:2.22.0:test' with basic configurator -->
[DEBUG]   (s) additionalClasspathElements = []
[DEBUG]   (s) argLine = -Xmx1024m -XX:MaxPermSize=256m
[DEBUG]   (s) basedir = /your-project
[DEBUG]   (s) childDelegation = false
[DEBUG]   (s) classesDirectory = /your-project/target/classes
[DEBUG]   (s) classpathDependencyExcludes = []
[DEBUG]   (s) classpathDependencyIncludes = []
[DEBUG]   (s) classpathDependencyScopeExclude = runtime
...
[DEBUG]   (s) reportsDirectory = /your-project/target/surefire-reports
[DEBUG]   (s) runOrder = filesystem
[DEBUG]   (s) systemProperties = {java.vendor=Oracle Corporation, ...}
[DEBUG]   (s) mavenTestSkip = false
...
[DEBUG]   (f) surefirePrintSummary = true
[DEBUG]   (f) testClassesDirectory = /your-project/target/test-classes
[DEBUG]   (f) testFailureIgnore = false
[DEBUG]   (f) testNGArtifactName = net.sf.testng:testng
[DEBUG]   (f) threadCountClasses = 2
[DEBUG]   (f) threadCountMethods = 120
[DEBUG]   (f) threadCountSuites = 1
[DEBUG]   (f) trimStackTrace = true
[DEBUG]   (f) useFile = true
[DEBUG] -- end configuration --

这时,我们会发现一个非常奇怪的生命周期目标(Lifecycle Target),即".surefire.debug"。我们不知道这是什么阶段,也不知道它的用途。

".surefire.debug" 是什么?

事实上,".surefire.debug" 不是一个真正的生命周期目标,而是 Maven Surefire (测试框架)插件的一个调试标志(Debug Flag)。如果你在运行测试时添加了 -Dmaven.surefire.debug 参数,Maven Surefire 会启动一个调试会话,监听6066端口,等待调试器连接:

$ mvn test -Dmaven.surefire.debug

接下来,你可以使用任何Java调试器连接到这个端口,如Eclipse、IntelliJ IDEA等。

使用 ".surefire.debug"

连接调试器并等待调试器连接,当调试器连接后,你现在已经开始调试应用程序(测试)。你可以在调试器中设置断点,一步一步地执行测试用例等。在调试会话中,你可以使用以下命令:

  • run (简称r):在调试器中启动执行测试用例。
  • next (简称n):执行下一步操作,不进入子方法。
  • step (简称s):执行下一步操作,进入子方法。
  • exit :终止调试会话。

使用 -Dmaven.surefire.debug 参数时,Maven启始一个调试器线程,该线程会一直处于等待状态,直到调试会话结束或触发中断事件。

总结

在追踪Maven构建问题时,调试是一种非常有用的方法。使用 ".surefire.debug" 标志启动调试器,可以让你在测试时更容易地找到代码错误。同时,你还可以充分利用调试器的功能来加快调试进程。

希望这篇文章对你有所帮助。