Maven:即使一个模块失败,也通过构建

时间:2018-07-26 20:33:39

标签: java maven jacoco

我正在尝试通过遵循步骤here来生成Jacoco代码覆盖率汇总报告。 我最初的maven项目可能包含多个模块,并且我通过代码将聚合器模块aggregator动态添加到主pom中。

文件夹结构看起来像这样(主项目中可以有任意数量的模块和子模块):

/SampleProject/
-- pom.xml
-- module1/
---- pom.xml
---- src/
-- module2/
---- pom.xml
---- src/
-- module3/
---- pom.xml
---- src/
-- aggregator/
---- pom.xml

这是主要pom:

SampleProject / pom.xml 。 (这里,通过我的代码动态添加了聚合器模块)

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.sample</groupId>
    <artifactId>sampleProject</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>
    <name>sampleProject</name>

    <modules>
        <module>module1</module>
        <module>module2</module>
        <module>module3</module>
        <module>aggregator</module>
    </modules>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.9</version>
                <executions>
                    <execution>
                        <id>prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

每个模块都有自己的pom.xml。聚合器pom(由我的代码生成)看起来像这样(每个模块都作为依赖项添加到此pom中。此信息是从模块的各个pom中获取的):

aggregator / pom.xml

<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>

    <parent>
        <groupId>com.sample</groupId>
        <artifactId>sampleProject</artifactId>
        <version>1.0</version>
    </parent>

    <artifactId>aggregator</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.sample.module1</groupId>
            <artifactId>module1</artifactId>
            <version>0.1</version>
        </dependency>
        <dependency>
            <groupId>com.sample.module2</groupId>
            <artifactId>module2</artifactId>
            <version>0.1</version>
        </dependency>
        <dependency>
            <groupId>com.sample.module3</groupId>
            <artifactId>module3</artifactId>
            <version>0.1</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <configuration>
                    <argLine>${argLine} -Xms256m -Xmx2048m</argLine>
                    <forkCount>1</forkCount>
                    <runOrder>random</runOrder>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.9</version>
                <executions>
                    <execution>
                        <id>report-aggregate</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report-aggregate</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

并且,为了生成汇总报告,我使用以下命令:

mvn clean test -DskipTests=false

这将在“ aggregator / target / site / jacoco-aggregate / index.html”中生成汇总报告

现在,问题是如果仅聚合器构建出现问题,并且构建失败(但是所有其他模块的构建都成功)。然后,Maven输出将如下所示:

[INFO] module1 .......................................... SUCCESS [  2.197 s]
[INFO] module2 .......................................... SUCCESS [ 11.287 s]
[INFO] module3 .......................................... SUCCESS [  6.969 s]
[INFO] aggregator ....................................... FAILURE [  1.241 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 00:21 min
[INFO] Finished at: 2018-07-26T13:01:12-07:00
[INFO] Final Memory: 258M/1149M

这意味着如果仅聚合器部分失败,则整个构建也将标记为失败。这会导致部署管道中的下一步出现问题。

因此,我想要的是即使聚合器构建失败,也应将整个构建标记为已通过(即忽略失败的聚合器构建),以便我可以继续进行下一步部署,以便不生成代码覆盖率报告不会使我的整个部署过程失败。 (我将在此过程的稍后部分处理缺少的代码覆盖率报告)。

有什么办法可以做到这一点?任何帮助将不胜感激。


更新1

我已经检查了this的答案,这不是我想要的。在maven中使用-fae标志仍会将构建标记为最终失败。

此外,我也不想要-fn标志,因为那样的话,我也将忽略模块中实际的构建失败,这是不希望的。

我正在寻找一种忽略Maven中仅一个模块的故障的方法。

我不确定是否可以这样做,也欢迎其他建议。


更新2

更新和一些背景信息。

因此,我正在将该工具构建为一种可在所有项目上运行的中央工具,因此它应该足够通用,以适应不同类型的配置,而无需更改主项目(正在运行测试的项目) )。

截至目前,看来我要找的东西是不可能的。因此,作为一种解决方法,我要求主项目的所有者包括一个配置文件,该文件告诉我的工具要包括哪些软件包以进行代码覆盖。

如果我找到更好的解决方案或解决方法,请在这里更新。

0 个答案:

没有答案