Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在多模块maven项目中,如何在默认情况下跳过集成测试,但仍按需运行它们?_Java_Maven_Maven 3_Maven Failsafe Plugin - Fatal编程技术网

Java 在多模块maven项目中,如何在默认情况下跳过集成测试,但仍按需运行它们?

Java 在多模块maven项目中,如何在默认情况下跳过集成测试,但仍按需运行它们?,java,maven,maven-3,maven-failsafe-plugin,Java,Maven,Maven 3,Maven Failsafe Plugin,我有一个多模块项目,其结构如下: Project: - module1 - module2 - integration-test - parent pom 实现以下目标的正确方法是什么: 使用mvn clean install 按需运行集成测试(可以使用maven failsafe插件,也可以通过maven概要文件?) 集成测试失败时使构建失败 默认情况下,不应使用mvn clean install运行集成测试 集成测试模块只有集成测试 我尝试过使用maven failsa

我有一个多模块项目,其结构如下:

Project:    
 - module1
 - module2
 - integration-test
 - parent pom
实现以下目标的正确方法是什么:

  • 使用
    mvn clean install
  • 按需运行集成测试(可以使用maven failsafe插件,也可以通过maven概要文件?)
  • 集成测试失败时使构建失败
  • 默认情况下,不应使用
    mvn clean install运行集成测试
  • 集成测试模块只有集成测试
我尝试过使用maven failsafe插件和maven sunfire插件(用于单元测试)进行多次黑客攻击,但未能以标准方式实现上述目标

以下是集成测试pom的相关部分的外观:

<dependencies>
   <!-- dependencies required for this module-->

</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <version>1.12</version>
            <executions>
                <execution>
                    <id>add-integration-test-sources</id>
                    <phase>generate-test-sources</phase>
                    <goals>
                        <goal>add-test-source</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <source>src/test/java</source>
                        </sources>
                    </configuration>
                </execution>
                <execution>
                    <id>add-integration-test-resources</id>
                    <phase>generate-test-resources</phase>
                    <goals>
                        <goal>add-test-resource</goal>
                    </goals>
                    <configuration>
                        <resources>
                            <resource>
                                <filtering>true</filtering>
                                <directory>src/test/resources</directory>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin> 
    </plugins>
</build>

<profiles>
    <profile>
        <id>run-its</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>integration-test</goal>
                                <goal>verify</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

org.codehaus.mojo
构建助手maven插件
1.12
添加集成测试源
生成测试源
添加测试源
src/test/java
添加集成测试资源
生成测试资源
添加测试资源
真的
src/测试/资源
运行
org.apache.maven.plugins
maven故障保护插件
集成测试
验证


目前,当我运行
mvn clean install
时,它也运行集成测试。当我运行
mvn-Prun它的clean verify
时,它也在运行来自其他模块的单元测试。我缺少什么?

我不知道这是否是最好的解决方案,但您可以使用配置文件来实现这一点。例如,在主pom.xml中,您只在
部分添加其他模块,然后添加另一个配置文件:

<modules>
... standard modules ...
</modules>
<profiles>
 <profile>
   <id>tests</id>
      <modules>
        <module>module1</module> 
... standard modules repeated (it might not be needed>...
        <module>module2</module>
        <module>module-integration-test</module>
      </modules> 
  </profile> 
</profiles>
如果您想运行集成测试和其他模块,这将起作用。如果只想运行集成测试,可以这样做:

<modules>
  <!-- EMPTY -->
</modules>
<profiles>
 <profile>
   <id>defaultModule</id>
   <activation>
      <activeByDefault>true</activeByDefault>
   </activation>
     <modules>
        <module>module1</module> 
... standard modules repeated (it might not be needed>...
        <module>module2</module>           
      </modules> 
 </profile>
 <profile>
   <id>tests</id>
      <modules>           
        <module>module-integration-test</module>
      </modules> 
  </profile> 
</profiles>

默认模块
真的
模块1
... 标准模块重复(可能不需要>。。。
模块2
测验
模块集成测试

通过这种方式,使用mvn clean install,您将使用defaultModule(默认情况下为ActiveModule)运行,如果您指定-p测试,您将只运行测试

,您只需在运行构建时设置
-DskipITs=true
即可跳过集成测试的执行:

mvn clean install -DskipITs=true
这将运行除ITs之外的所有其他测试(参见文档)

如果你只想跑步

mvn clean install
您可以在pom.xml中为Skippits设置默认值

<properties>
    <skipITs>true</skipITs>
</properties>
要仅运行ITs而不运行Unittests,您可以像这样配置
maven-surefire插件的-Property

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.12.4</version>
    <configuration>
        <skip>${skipUnitTests}</skip>
    </configuration>
</plugin>
请注意,默认情况下,
skippunittes
将为
false
,因此无需为此声明属性

如果你想使用一个配置文件,它应该是这样工作的

    <profile>
        <id>ITs</id>
        <properties>
            <skipUnitTests>true</skipUnitTests>
            <skipITs>false</skipITs> 
        </properties>
    </profile>
当然,您也可以直接在配置文件中使用带有true的
maven-surefire-plugin
插件配置,这样就不需要额外的属性,比如

<profile>
    <id>ITs</id>
    <properties>
        <skipITs>false</skipITs> 
    </properties>
    <build>
       <plugins>
           <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.12.4</version>
                <configuration>
                   <skip>true</skip>
                </configuration>
            </plugin>
       </plugins>
    </build>
</profile>

它的
假的
org.apache.maven.plugins
maven surefire插件
2.12.4
真的

最好是制作一个单独的模块,其中包含集成测试,您的问题中已经显示了这些测试。现在如何处理正在运行或未运行的集成测试

集成测试模块如下所示:


4.0.0
群居
集成测试
0.1.0-SNAPSHOT
集成测试
罐子
改装
groupId
艺术品
${project.version}
....
....
...
测试
运行
org.apache.maven.plugins
maven故障保护插件
集成测试
验证
通过使用此功能,您可以通过以下方式控制运行集成测试:

mvn -Prun-its clean verify
您必须定义与集成测试模块所需的其他模块的依赖关系,或者确保这些模块必须在此集成测试模块之前构建,这一点很重要

此外,您现在可以在此处配置集成测试所需的补充内容,例如在
集成前测试
和/或
集成后测试
阶段运行这些补充内容

如果您将测试代码放入
src/test/java
中,并将可选资源放入
src/test/resources
中,那么您现在可以在集成测试模块中独立于任何其他模块定义依赖项

当然,您应该在父pom中的pluginManagement中定义插件的版本,以进行de
    <profile>
        <id>ITs</id>
        <properties>
            <skipUnitTests>true</skipUnitTests>
            <skipITs>false</skipITs> 
        </properties>
    </profile>
mvn clean install -PITs
<profile>
    <id>ITs</id>
    <properties>
        <skipITs>false</skipITs> 
    </properties>
    <build>
       <plugins>
           <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.12.4</version>
                <configuration>
                   <skip>true</skip>
                </configuration>
            </plugin>
       </plugins>
    </build>
</profile>
mvn -Prun-its clean verify