ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java操作Jacoco合并dump文件

2021-09-03 09:01:02  阅读:301  来源: 互联网

标签:java final dump System loader File println path Jacoco


import org.apache.maven.plugin.MojoExecutionException;
import org.jacoco.core.tools.ExecFileLoader;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class MergeDump {

    private final String path ;
    private final File destFile ;

    public MergeDump(String path){
        this.path = path;
        this.destFile = new File(path + "/jacoco.exec");
    }

    private List<File> fileSets(String dir){
        System.out.println(dir);
        List<File> fileSetList = new ArrayList<File>();
        File path = new File(dir);
        if ( ! path.exists() ){
            System.out.println("No path name is :" + dir);
            return null;
        }
        File[] files = path.listFiles();
        try {
            if (files == null || files.length == 0) {
                return null;
            }
        } catch (NullPointerException npe) {
            npe.printStackTrace();
        }
        for (File file : files) {
            if (file.getName().contains(".exec")) {
                System.out.println("文件:" + file.getAbsolutePath());
                fileSetList.add(file);
            } else {
                System.out.println("非exec文件:" + file.getAbsolutePath());
            }
        }
        return fileSetList;
    }

    public void executeMerge() throws MojoExecutionException {

        final ExecFileLoader loader = new ExecFileLoader();
        load(loader);
        save(loader);
        // 执行完成后,删除非必须的dump文件
        for (final File fileSet : fileSets(this.path)) {
            if ( ! fileSet.getName().equals("jacoco.exec") ) {
                fileSet.delete();
            }
        }
    }

    /**
     * 加载dump文件
     * @param loader
     * @throws MojoExecutionException
     */
    public void load(final ExecFileLoader loader) throws MojoExecutionException {
        for (final File fileSet : fileSets(this.path)) {
            System.out.println(fileSet.getAbsoluteFile());
            final File inputFile = new File(this.path, fileSet.getName());
            if (inputFile.isDirectory()) {
                continue;
            }
            try {
                System.out.println("Loading execution data file " + inputFile.getAbsolutePath());
                loader.load(inputFile);
                System.out.println(loader.getExecutionDataStore().getContents());
            } catch (final IOException e) {
                throw new MojoExecutionException("Unable to read "
                        + inputFile.getAbsolutePath(), e);
            }
        }
    }

    /**
     * 执行合并文件
     * @param loader
     * @throws MojoExecutionException
     */
    public void save(final ExecFileLoader loader) throws MojoExecutionException {
        if (loader.getExecutionDataStore().getContents().isEmpty()) {
            System.out.println("Skipping JaCoCo merge execution due to missing execution data files");
            return;
        }
        System.out.println("Writing merged execution data to " + this.destFile.getAbsolutePath());
        try {
            loader.save(this.destFile, false);
        } catch (final IOException e) {
            throw new MojoExecutionException("Unable to write merged file "
                    + this.destFile.getAbsolutePath(), e);
        }
    }
}
参考地址:
https://www.cnblogs.com/wozijisun/p/10442124.html

标签:java,final,dump,System,loader,File,println,path,Jacoco
来源: https://www.cnblogs.com/yuarvin/p/15221620.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有