首页 > 解决方案 > 奇怪的行为 Maven 测试

问题描述

我坚信我对 Maven 及其行为非常熟悉,但我不知道这个。我有一个父项目,我在其中定义了属性:

        <maven.test.skip>true</maven.test.skip>

我知道这意味着不构建测试罐。

然后我在父项目中创建了三个属性,如下所示

<skipChild1Test>true</skipChild1Test>
<skipChild2Test>true</skipChild2Test>
<skipChild3Test>true</skipChild3Test>

每个子项目都有一个 maven-surefire-plugin 部分,如下所示

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.0.0-M3</version>
    <configuration>
        <skipTests>${skipChildNtest}</skipTests>
    </configuration>
</plugin>

基本上我想在父 POM 中静态声明哪些子项目应该运行测试,哪些不运行。

然而,这些属性似乎根本没有任何效果,所有这些都是由原始属性驱动的

<maven.test.skip>true</maven.test.skip>

如果为假,则对孩子进行测试,如果为真,则不会。

mvn test我总是在父项目上发出命令

我是否错误地配置了孩子?

更新

查看 maven-surefire-plugin 测试目标详细信息,我阅读了有关跳过参数的以下内容:

"将此设置为 "true" 以完全绕过单元测试。不推荐使用它,特别是如果您使用 "maven.test.skip" 属性启用它,因为 maven.test.skip 禁用运行测试和编译测试. 考虑改用 skipTests 参数。 "

所以我在 stackoverflow 和许多其他地方读到的内容是不正确的。maven.test.skip 驱动打包和运行测试

标签: javamaven

解决方案


您可以使用覆盖子项目中的属性<maven.test.skip>${skipChildNtest}</maven.test.skip>

因此<maven.test.skip>,您的父项目中的属性不会干扰您的子项目。

也许您也可以摆脱子项目中的插件声明,但我不确定。


推荐阅读