JaCoCo多项目HTML覆盖率报告不显示源文件的Ant批量配置问题
方案1:通过插件列表文件动态生成配置
这个方案完全匹配你提到的「读文件+遍历生成fileset」的需求,需要依赖Ant扩展包ant-contrib:
- 先把所有需要纳入统计的插件名写入
jacoco-plugins.list,放在build.xml同目录,每行一个插件ID:
com.gandu.da.util.test com.gandu.da.util.manager.test com.gandu.da.util.alltests
- 引入ant-contrib,然后预定义合并后的类文件、源文件集合:
<!-- 引入ant-contrib扩展,需确保ant-contrib.jar放在Ant的lib目录下 --> <taskdef resource="net/sf/antcontrib/antcontrib.properties" /> <!-- 预定义类文件、源文件的合并集合 --> <path id="jacoco.class.files"> </path> <fileset id="jacoco.source.files" encoding="UTF-8"> </fileset> <!-- 遍历插件列表添加路径 --> <loadfile property="plugin.list" srcFile="jacoco-plugins.list" /> <foreach list="${plugin.list}" delimiter="${line.separator}" param="plugin.id" trim="true"> <sequential> <!-- 添加当前插件的class文件路径 --> <path refid="jacoco.class.files"> <fileset dir="${buildDirectory}/plugins/@{plugin.id}/bin"> <include name="**/*.class" /> </fileset> </path> <!-- 添加当前插件的源文件路径 --> <fileset refid="jacoco.source.files"> <fileset dir="${buildDirectory}/plugins/@{plugin.id}/src"> <include name="**/*.java" /> </fileset> </fileset> </sequential> </foreach>
- 直接在jacoco:report中引用预定义的集合即可:
<jacoco:report> <executiondata> <file file="${coverage.metadata.file}"/> </executiondata> <structure name="JaCoCo Coverage Report"> <classfiles> <path refid="jacoco.class.files" /> </classfiles> <sourcefiles encoding="UTF-8"> <fileset refid="jacoco.source.files" /> </sourcefiles> </structure> <html destdir="${coverage.html.dir}"/> <csv destfile="${coverage.csv.file}"/> <xml destfile="${coverage.xml.file}"/> </jacoco:report>
方案2:无需维护列表,自动匹配所有符合规则的插件
如果不需要手动指定插件范围,只要匹配所有com.gandu*开头的插件,可以直接用<dirset>自动扫描,不需要额外依赖:
<!-- 批量生成类文件集合 --> <path id="jacoco.class.files"> <fileset dir="${buildDirectory}/plugins"> <include name="com.gandu*/bin/**/*.class" /> </fileset> </path> <!-- 批量生成源文件集合 --> <fileset id="jacoco.source.files" dir="${buildDirectory}/plugins" encoding="UTF-8"> <include name="com.gandu*/src/**/*.java" /> </fileset>
后续jacoco:report的配置和方案1完全一致,直接引用对应的id即可。
注意:如果你的编译输出目录是@dot而不是bin,把路径里的bin替换成@dot即可正常匹配。
内容的提问来源于stack exchange,提问作者vesii
相关产品推荐
相关产品推荐

