【发布时间】:2014-09-27 20:52:28
【问题描述】:
我正在尝试使用 Maven 配置文件来区分不同类型的测试(单元、集成、验收)。这是主 pom 文件的一部分:
<properties>
<build.profile.id>dev</build.profile.id>
<skip.unit.tests>false</skip.unit.tests>
<skip.integration.tests>true</skip.integration.tests>
<skip.acceptance.tests>true</skip.acceptance.tests>
</properties>
<profiles>
<profile>
<id>dev</id>
</profile>
<profile>
<id>integration-test</id>
<properties>
<build.profile.id>integration-test</build.profile.id>
<skip.unit.tests>true</skip.unit.tests>
<skip.integration.tests>false</skip.integration.tests>
<skip.acceptance.tests>true</skip.acceptance.tests>
</properties>
</profile>
<profile>
<id>acceptance-test</id>
<properties>
<build.profile.id>acceptance-test</build.profile.id>
<skip.unit.tests>true</skip.unit.tests>
<skip.integration.tests>true</skip.integration.tests>
<skip.acceptance.tests>false</skip.acceptance.tests>
</properties>
</profile>
</profiles>
<build>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
<configuration>
<skipTests>${skip.unit.tests}</skipTests>
<includes>
<include>**/*UnitTests.java</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.17</version>
<executions>
<execution>
<id>integration-tests</id>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
<skipTests>${skip.integration.tests}</skipTests>
<includes>
<include>**/*IntegrationTests.java</include>
</includes>
</configuration>
</execution>
<execution>
<id>acceptance-tests</id>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
<configuration>
<skipTests>${skip.acceptance.tests}</skipTests>
<includes>
<include>**/*AcceptanceTests.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
如您所见,我正在使用配置文件信息来根据所使用的配置文件运行某些类型的测试。默认配置文件是 dev,它只会运行单元测试。它们可以像这样执行:
mvn clean test
对于集成和验收测试,我使用故障安全插件:运行集成测试的示例是:
mvn clean verify -P integration-test
当我从主 pom 模块运行它时它工作正常,但从子模块运行它时它不起作用。测试只是被忽略。查看子模块的有效 pom 我没有看到配置文件。我做错了什么还是这是 Maven 的预期行为?如果无法通过这种方式实现配置文件继承(需要级联到层次结构中最深的模块),如何实现?
更新:这是项目层次结构 项目目录
--main module
--commons module
--administration
----domain
----data
----business
----web
【问题讨论】:
-
您的 POM 层次结构是什么?基于此 - stackoverflow.com/questions/3695394/inheriting-maven-profiles - 它应该可以工作。
-
我的意思是...您的模块将多模块 POM 作为其父级,对吗?
-
我已经更新了问题。是的,他们有。
-
从官方消息看来,继承应该可以工作 - maven.apache.org/guides/mini/… 。矛盾的信息就这么多:)。
-
Re “查看子模块的有效 pom 我没有看到配置文件。” 我假设聚合器项目(声明
s 的那个)不是在(子)模块或它们的其中一个模块中声明为 的那个。继承和聚合不一定具有相同的树层次结构,请参阅Project Inheritance vs Project Aggregation。
标签: java maven inheritance automated-tests profiles