未显式配置跳过测试,执行mvn clean install时Junit测试被跳过
我碰到过好几个开发者遇到和你一样的情况——明明没在pom.xml里配置跳过测试,执行mvn clean install时测试却自动被跳过了。结合你给出的日志(没复制测试资源、没编译测试源码),下面是最常见的排查方向和解决办法:
1. 检查全局Maven配置
Maven的全局settings.xml文件(通常在~/.m2/settings.xml或者Maven安装目录下的conf/settings.xml)可能偷偷设置了默认跳过测试的参数。打开这个文件,看看有没有类似下面的配置:
<profile> <id>default</id> <properties> <maven.test.skip>true</maven.test.skip> <skipTests>true</skipTests> </properties> </profile>
如果有,直接注释掉或者删除这些配置就行。要是暂时不想改全局配置,也可以在执行命令时显式覆盖:
mvn clean install -Dmaven.test.skip=false -DskipTests=false
2. 排查父POM的继承配置
如果你的项目继承了某个父POM,很可能是父POM里已经配置了跳过测试的规则。去父POM的<properties>节点看看有没有maven.test.skip=true,或者<build>下的maven-surefire-plugin是不是设置了<skip>true</skip>。找到的话,要么修改父POM,要么在当前项目的pom.xml里显式覆盖这个配置。
3. 确认命令行/环境变量残留
有时候之前执行命令时加了-DskipTests=true这类参数,IDE或者构建工具会记住这些配置;或者系统的环境变量MAVEN_OPTS里包含了跳过测试的参数。你可以执行mvn help:system命令,查看输出里的系统属性和环境变量,确认有没有相关的配置项。
4. 显式配置Surefire插件强制执行测试
即使你没显式配置插件,有时候插件的默认行为会被间接修改。你可以在当前项目的pom.xml里显式配置maven-surefire插件,强制开启测试:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.18.1</version> <!-- 和你日志里的插件版本保持一致 --> <configuration> <skip>false</skip> </configuration> </plugin> </plugins> </build>
5. 检查测试文件的路径是否合规
Maven默认只会识别src/test/java下的测试源码和src/test/resources下的测试资源。如果你的测试文件放在了其他路径,Maven会找不到这些文件,自然就跳过编译和执行了。确认下你的项目结构是不是符合Maven的标准目录规范。
快速验证小技巧
先试试执行mvn clean install -DskipTests=false,如果这次测试正常执行了,那基本可以确定是全局配置或者环境变量的问题;如果还是不行,再去排查父POM和项目结构。
内容的提问来源于stack exchange,提问作者Shruti Gupta

