ves*_*sii 11 java code-coverage eclipse-pde jacoco
我正在使用 PDE,并在 build.xml 中编译代码并尝试使用 JaCoCo 和 JUnit 创建覆盖率报告。我注意到它现在确实显示了源文件,即使我sourcefiles在. 为了调试它(因为它不打印任何错误),我尝试在本地运行它:structurejacoco:report
java -jar jacoco/jacococli.jar report /buildFiles/coverage/jacoco.exec --classfiles /buildFiles/plugins/com.gandu.da.util.test/bin/com/gandu/da/util/test/AllTests.class --sourcefiles /buildFiles/plugins/com.gandu.da.util.test/src/com/gandu/da/util/test/AllTests.java --html html_report
Run Code Online (Sandbox Code Playgroud)
但它仍然没有显示 html 文件中的源代码。在JaCoCo 官方常见问题解答中我看到:
为什么覆盖率报告不显示突出显示的源代码?确保满足以下先决条件才能在 JaCoCo 覆盖率报告中突出显示源代码:
- 类文件必须使用调试信息进行编译以包含行号。
- 必须在报告生成时正确提供源文件。即指定的源文件夹必须是定义 Java 包的文件夹的直接父级。
我用标志编译了代码-g以获取所有信息 - 它不起作用。另外我相信我确实按预期提供了 src/bin 文件,所以我不确定为什么它不起作用。如何让它发挥作用?
编辑:我必须提供src目录:
java -jar jacoco/jacococli.jar report /buildFiles/coverage/jacoco.exec --classfiles /buildFiles/plugins/com.gandu.da.util.test/bin/com/gandu/da/util/test/AllTests.class --sourcefiles /buildFiles/plugins/com.gandu.da.util.test/src
# WORKED!
Run Code Online (Sandbox Code Playgroud)
现在我想用我的 build.xml 解决这个问题。代码:
<jacoco:report>
<executiondata>
<file file="${coverage.file}"/>
</executiondata>
<structure name="Coverage Report">
<classfiles>
<fileset dir="${buildDirectory}/plugins/com.gandu.da.util.test/bin">
<include name="**/*.class" />
</fileset>
</classfiles>
<sourcefiles encoding="UTF-8">
<fileset dir="${buildDirectory}/plugins/com.gandu.da.util.test/src">
<include name="**/*.java" />
</fileset>
</sourcefiles>
</structure>
<html destdir="${coverage.html}"/>
</jacoco:report>
Run Code Online (Sandbox Code Playgroud)
该代码有效,并提供了覆盖率报告和源文件。但正如你所看到的,我只需要硬编码一个包 ( com.gandu.da.util.test)。我想从以下所有包创建覆盖率报告:
${buildDirectory}/plugins/com.gandu*/src.${buildDirectory}/plugins/com.gandu*/bin。所以我尝试:
<jacoco:report>
<executiondata>
<file file="${coverage.file}"/>
</executiondata>
<structure name="Coverage Report">
<classfiles>
<fileset dir="${buildDirectory}/plugins/com.gandu.*/bin">
<include name="**/*.class" />
</fileset>
</classfiles>
<sourcefiles encoding="UTF-8">
<fileset dir="${buildDirectory}/plugins/com.gandu.*/src">
<include name="**/*.java" />
</fileset>
</sourcefiles>
</structure>
<html destdir="${coverage.html}"/>
</jacoco:report>
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为路径(带有星星)不存在。这是有道理的,因为dir期望得到一条路径。所以我认为这<foreach>可能会有所帮助,但在阅读文档后,我无法找到使用它的方法。上面的代码就是我所需要的。我希望听到关于如何解决这个问题的建议。
还要注意一点,因为它很重要:源文件和类文件的结构:
${buildDirectory}/plugins/com.gandu*/src.${buildDirectory}/plugins/com.gandu*/bin.我也尝试插入${buildDirectory}/plugins两者dir,<classfiles>但<sourcefiles>没有成功。它确实创建了覆盖率报告,但不显示源文件。我想我需要提供src每个包的目录。
所以我想使用<foreach>将每个包插入到结构中。我可能需要用来jacoco:merge合并它们,但我不确定。
也尝试includes="**/usr/**过 和includes="**/bin/**。
我还有一些不同的 ant 版本可以在这里使用。可能有帮助?另外,也许我可以以某种方式“硬编码”插件并“合并”报告?
编辑:看起来当您提供多个插件时它会起作用,如下所示:
<jacoco:report>
<!-- This task needs the collected execution data and ... -->
<executiondata>
<file file="${coverage.metadata.file}"/>
</executiondata>
<!-- the class files and optional source files ... -->
<structure name="JaCoCo Coverage Report">
<classfiles>
<fileset dir="${buildDirectory}/plugins/com.gandu.da.util.mangager.test/@dot">
<include name="**/*.class" />
</fileset>
<fileset dir="${buildDirectory}/plugins/com.gandu.da.util.alltests/@dot">
<include name="**/*.class" />
</fileset>
</classfiles>
<sourcefiles encoding="UTF-8">
<fileset dir="${buildDirectory}/plugins/com.gandu.da.util.mangager.test/src">
<include name="**/*.java" />
</fileset>
<fileset dir="${buildDirectory}/plugins/com.gandu.da.util.alltests/src">
<include name="**/*.java" />
</fileset>
</sourcefiles>
</structure>
<html destdir="${coverage.html.dir}"/>
<csv destfile="${coverage.csv.file}"/>
<xml destfile="${coverage.xml.file}"/>
</jacoco:report>
Run Code Online (Sandbox Code Playgroud)
是否可以将所有想要的名称(例如com.gandu.da.util.alltests)放入一个文件中,一一读取它们,然后对它们运行for(或foreach)并fileset可能添加它们(在将每个名称附加到路径之后)?
该问题不满足声明的先决条件之一:
指定的源文件夹必须是定义 Java 包的文件夹的直接父级
--sourcefiles /buildFiles/plugins/com.gandu.da.util.test/src
Run Code Online (Sandbox Code Playgroud)
Gradle 可能比 CLI 或 Maven 更支持脚本化。
| 归档时间: |
|
| 查看次数: |
2480 次 |
| 最近记录: |