All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sunyuan.click.debounce.utils.JarUtil Maven / Gradle / Ivy

package com.sunyuan.click.debounce.utils;

import com.sunyuan.click.debounce.callback.JarTransformCallBack;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.compress.utils.IOUtils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarOutputStream;

public class JarUtil {
    public static File modifyJarFile(File jarFile, File tempDir, JarTransformCallBack callBack) throws IOException {
        //临时输出文件
        String hexName = DigestUtils.md5Hex(jarFile.getAbsolutePath()).substring(0, 8);
        File outPutJar = new File(tempDir, hexName + jarFile.getName());
        JarOutputStream jarOutputStream = new JarOutputStream(new FileOutputStream(outPutJar));
        //原文件
        JarFile originJar = new JarFile(jarFile);
        Enumeration enumeration = originJar.entries();
        while (enumeration.hasMoreElements()) {
            JarEntry jarEntry = enumeration.nextElement();
            InputStream inputStream = originJar.getInputStream(jarEntry);
            String entryName = jarEntry.getName();
            JarEntry destEntry = new JarEntry(entryName);
            jarOutputStream.putNextEntry(destEntry);
            byte[] sourceClassBytes = IOUtils.toByteArray(inputStream);
            byte[] modifiedClassBytes = null;
            if (ClassUtil.checkClassName(entryName)) {
                modifiedClassBytes = callBack.process(entryName, sourceClassBytes);
            }
            if (modifiedClassBytes == null) {
                jarOutputStream.write(sourceClassBytes);
            } else {
                jarOutputStream.write(modifiedClassBytes);
            }
            jarOutputStream.closeEntry();
        }
        jarOutputStream.close();
        originJar.close();
        return outPutJar;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy