我在远程websphere服务器上使用Jacoco。我将它设置为tcpsrver并且我查询服务器以获取jacoco.exec
,使用此文件我可以为我的所有项目创建报告。我想要的是所有项目的单一报告。我已将每个报告添加到列表中,但是当我尝试创建单个报告时,我只能查看上一个项目的统计信息。
每个项目都在自己的文件夹中,每个文件夹都有自己的coveragereport
。我是这样做的
File[] fList = directory.listFiles();
ReportGenerator rg = new ReportGenerator();
for(File file : fList)
{
if( file.getAbsolutePath().contains("BL") )
{
if( new File( file.getAbsolutePath() + "\\bin" ).isDirectory() )
{
rg = new ReportGenerator(file);
rg.setExecutionDataFile(directory);
rg.setClassesDirectory(file, "\\bin");
rg.setReportDirectory(directory);
rg.setTitle(file);
rg.create();
}
}
else
{
if( new File( file.getAbsolutePath() + "\\WebContent" ).isDirectory() )
{
rg = new ReportGenerator(file);
rg.setExecutionDataFile( directory );
rg.setClassesDirectory( file , "\\WebContent\\WEB-INF\\classes" );
rg.setReportDirectory(directory);
rg.setTitle(file);
rg.create();
}
}
现在我将它们全部添加到列表中:
loadExecutionData();
final IBundleCoverage bundleCoverage = analyzeStructure();
reportsList.add(this);
此时我想调用一种方法来生成报告,但它不起作用。到目前为止,我正在尝试使用jacoco网站上提供的示例。
http://www.eclemma.org/jacoco/trunk/doc/examples/java/ReportGenerator.java
我尝试做的是编辑createReport
方法,创建HTMLFormatter
和IReportVisitor
,循环浏览报告列表并添加visitInfo
和{{ 1}}然后在最后,调用visitBundle
将内容转储到文件中。问题在于设置visitEnd()
和visitInfo
我是否覆盖了以前的报告。
我希望有人知道如何附加报告以制作一份更大的报告供查看。
答案 0 :(得分:1)
幸运的是,通过阅读和反复试验,我发现了如何以编程方式创建和合并jacoco代码覆盖率报告。
简单的方法是创建一个包覆盖列表,创建一个组并将它们放在MultiReportVisitor
public void addToBundleCoverageList() throws IOException {
loadExecutionData();
bundleCoverage = analyzeStructure();
coverageList.add(bundleCoverage);
}
public void createCoverageList() throws IOException
{
for(int i=0; i<coverageList.size(); i++)
{
HTMLFormatter htmlFormatter = new HTMLFormatter();
IReportVisitor visitor = htmlFormatter
.createVisitor(new FileMultiReportOutput(reportDirectory));
visitor.visitInfo(execFileLoader.getSessionInfoStore().getInfos(),
execFileLoader.getExecutionDataStore().getContents());
visitors.add(visitor);
}
}
public void createReportFromList() throws IOException
{
MultiReportVisitor mrv = new MultiReportVisitor(visitors);
IReportGroupVisitor irgv = mrv.visitGroup("group");
for(int i=0; i<coverageList.size(); i++)
{
irgv.visitBundle(coverageList.get(i), indexHtml);
System.out.println("Processing: " + coverageList.get(i).getName());
}
mrv.visitEnd();
}