配置Maven Surefire Plugin实现TestNG文件名执行测试报错求助
Maven Surefire Plugin配置问题:通过TestNG文件名执行测试失败
原始配置
之前的POM中maven-surefire-plugin配置如下,可通过绝对路径指定TestNG配置文件执行测试:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.20</version> <configuration> <argLine> -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/1.9.22/aspectjweaver-1.9.22.jar" </argLine> <suiteXmlFiles> <!--suppress UnresolvedMavenProperty --> <suiteXmlFile>${suiteFile}</suiteXmlFile> </suiteXmlFiles> </configuration> </plugin>
执行命令:mvn test -DsuiteFile=${absolute_path_of_testng.xml}
需求与修改
希望仅通过TestNG文件名执行测试,因此修改配置,在suiteXmlFile中添加项目根目录变量${basedir}/:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.20</version> <configuration> <argLine> -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/1.9.22/aspectjweaver-1.9.22.jar" </argLine> <suiteXmlFiles> <!--suppress UnresolvedMavenProperty --> <suiteXmlFile>${basedir}/${suiteFile}</suiteXmlFile> </suiteXmlFiles> </configuration> </plugin>
执行错误
执行命令后出现如下错误:
[INFO] Scanning for projects... [INFO] [INFO] ----------------------< org.example:POMStructure >---------------------- [INFO] Building POMStructure 1.0-SNAPSHOT [INFO] from pom.xml [INFO] --------------------------------[ jar ]--------------------------------- [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 0.089 s [INFO] Finished at: 2024-06-26T16:38:51+04:00 [INFO] ------------------------------------------------------------------------ [ERROR] Unknown lifecycle phase ".xml". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: pre-clean, clean, post-clean, validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-site, site, post-site, site-deploy. -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/LifecyclePhaseNotFoundException
解决方案
问题根源
你的POM配置本身没有错误,错误出在命令行参数的传递方式上。报错提示Unknown lifecycle phase ".xml",说明Maven将.xml识别成了一个生命周期阶段,这是因为shell解析命令时,把文件名部分拆成了独立参数(比如变量展开时包含空格、参数书写时遗漏等号或引号)。
修复步骤
- 正确传递命令参数
- 直接指定文件名时,使用如下命令:
mvn test -DsuiteFile=testng.xml - 如果使用shell变量传递文件名,变量值包含空格时必须加引号,避免shell拆分参数:
# 先定义变量 name_of_testng_file="my test.xml" # 带引号执行命令 mvn test -DsuiteFile="${name_of_testng_file}"
- 直接指定文件名时,使用如下命令:
- 升级插件版本(可选但推荐)
当前使用的maven-surefire-plugin 2.20版本较老,存在一些已知兼容性问题,建议升级到最新稳定版(如3.2.5),修改后的插件配置如下:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.5</version> <configuration> <argLine> -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/1.9.22/aspectjweaver-1.9.22.jar" </argLine> <suiteXmlFiles> <!--suppress UnresolvedMavenProperty --> <suiteXmlFile>${basedir}/${suiteFile}</suiteXmlFile> </suiteXmlFiles> </configuration> </plugin>
内容的提问来源于stack exchange,提问作者Davit Ebralidze
相关产品推荐
相关产品推荐

