排除某些项目的测试

时间:2019-08-29 22:55:19

标签: java maven

对不起,我是Java的新手,我想知道如何避免测试我的依赖项项目。

我有一个Proj3,它具有两个依赖项Proj1和Proj2(以及其他)。

如果我执行 mvn全新安装,不仅要执行当前Proj3的测试,还要执行依赖项Proj1和Proj2的测试。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.proj.environment.tests.api</groupId>
<artifactId>environment_Api_Tests</artifactId>
<version>437r21</version>
<packaging>pom</packaging>

<properties>
    <cucumber.version>4.3.1</cucumber.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.version>437r21</project.version>
</properties>

<dependencies>
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>${cucumber.version}</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>${cucumber.version}</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>com.proj.environment</groupId>
        <artifactId>Proj1</artifactId>
        <version>${project.version}</version>

    </dependency>

    <dependency>
        <groupId>com.proj.environment</groupId>
        <artifactId>Proj2</artifactId>
        <version>${project.version}</version>

    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <encoding>UTF-8</encoding>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.18.1</version>
            <configuration>
                <testFailureIgnore>true</testFailureIgnore>
                <includes>
                    <exclude>**/*Test.java</exclude>
                </includes>
            </configuration>
        </plugin>
    </plugins>
</build>

<modules>
    <module>../Proj1</module>
    <module>../Proj2</module>        
</modules>

非常感谢,

1 个答案:

答案 0 :(得分:0)

您显示的POM是针对aggregation (parent) projectenvironment_Api_Tests项目。那是

  

...如果对父项目调用了Maven命令,则该Maven命令也将对父模块执行。

因此,不清楚您的案子到底是什么。 根据与您提到的Proj3有什么关系,有不同的答案:

如果environment_Api_Tests项目(您发布的POM)就是您所说的Proj3

对模块执行命令是完全正常的(不要将其与依赖项混淆),并且从模块中排除测试确实没有意义。而且,您不能在聚合(父)项目本身中进行测试。因此,如果您只想执行某些模块,那么最好引入仅包含那些模块的另一个聚合项目。您可以进一步聚合聚合项目。

此处的<dependencies>与之无关。该部分在聚合项目中唯一要做的就是为所有<modules>提供依赖项。就您而言,这意味着:

  • Proj1取决于Proj1Proj2
  • Proj2取决于Proj1Proj2

这可能不是您想要的!

如果还有另一个Proj3也是environment_Api_Tests中的模块

然后,您只需要对该项目执行测试,而不是environment_Api_Tests。即使Proj3依赖于Proj1Proj2,他们的测试也不会执行

如果Proj3environment_Api_Tests,但这并不意味着它是一个聚合项目

然后,您需要将包装从pom更改为jar(或任何目标),并移除<modules> ,但保留{{1 }}。这样,项目可以拥有自己的测试,而不会执行依赖项的测试。

关于测试依赖项的说明

要记住的一件事是测试依赖性在多模块项目中如何工作。如果一个模块中的测试依赖于另一模块中的测试,则必须create a jar containing test classes