Jacoco 报告合并

Jacoco Report Merging

我在远程 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,遍历报告列表并添加 visitInfovisitBundle 然后在最后调用 visitEnd() 将内容转储到文件中。问题是问题出在设置 visitInfovisitBundle 我覆盖了以前的报告。

我希望有人知道如何附加报告以制作更大的报告以供查看。

幸运的是,通过阅读和反复试验,我发现了如何以编程方式创建和合并 jacoco 代码覆盖率报告。

简单的方法是创建一个 bundle coverage 列表,创建一个组并将它们放在一起 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();
    }