如果我只有一个项目,但现在我有一个多模块项目,我能够使代码覆盖率正常工作。
我的应用程序是在 api
项目中构建的,我所有的集成测试都在一个单独的项目中运行,该项目使用作为先前模块构建的 Artifact 。
构建运行但我没有收到代码覆盖率报告,而是收到信息消息:
由于缺少类目录而跳过 JaCoCo 执行
我的覆盖率报告文件 jacoco-it.exec
已创建,但似乎 jacoco
插件需要运行测试的项目中的类。
有人能告诉我当类在另一个模块中时我需要做什么才能创建覆盖率报告吗?
最佳答案
通过反复试验,我设法找到了一种解决方法。
似乎 jacoco 插件很乐意在没有类的情况下创建 exec 文件,但没有它们就不会创建报告,我不明白 jacoco 是如何在内部工作的,所以如果有人知道,你能解释一下吗?
我也不确定我所做的是否可靠,但它似乎确实报告了我的 selenium 驱动测试的覆盖率。
我自己想出的(可能的)解决方案是使用 maven 资源插件将已从我的 target\cargo.. 目录中的 war 文件分解的类复制到目录 target\classes 中:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>pre-integration-test</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<resources>
<resource>
<directory>${basedir}/target/cargo/configurations/tomcat7x/webapps/calculator-api/WEB-INF/classes</directory>
<filtering>false</filtering>
<excludes>
<exclude>**/*Config*.*</exclude>
<exclude>**/*Initialiser*.*</exclude>
</excludes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
这似乎让 jacoco 插件很开心,我得到了我的代码覆盖率,尽管现在插件似乎忽略了我的排除列表。
有谁知道这是否真的是一个解决方案,它“似乎”有效,但我无法在网上找到任何推荐的方法,而且我也不确定为什么 jacoco 代理设置上的排除选项似乎不再存在去工作。
我已经设法绕过 jacoco 插件而不排除文件,只是不使用资源插件复制它们,但我仍然不明白 jacoco 是如何工作的。
关于java - Maven 构建中的代码覆盖率 - 由于缺少类目录而跳过 JaCoCo 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37410322/