文档章节

JAR文件最小体积发布

jimyao
 jimyao
发布于 2016/01/27 23:21
字数 267
阅读 10
收藏 0
import java.io.*;
import java.util.*;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarInputStream;
import java.util.jar.JarOutputStream;
import java.util.zip.ZipEntry;

/**
 * Created by jimyao on 2016/1/23.
 * 使用-XX:+TraceClassLoading输出程序所需要的class,定制jar文件
 */
public class Test6 {
    static BufferedReader fileIn;
    static ArrayList<String> newClassList;
    static JarInputStream jarIn;
    static JarOutputStream jarOut;
    static byte[] bytes;
    static final String rtFileName = "C://Program Files//Java//jdk1.8.0_65//jre//lib//rt.jar";

    public Test6() throws IOException {
        newClassList = new ArrayList<>();
        bytes = new byte[1024];
        jarIn = new JarInputStream(new BufferedInputStream(new FileInputStream(rtFileName)));
        jarOut = new JarOutputStream(new BufferedOutputStream(new FileOutputStream("C:\\1\\newrt.jar")));
    }

    private static void doJar(String sourceFile) throws FileNotFoundException, IOException {

        try {
            fileIn = new BufferedReader(new InputStreamReader(new FileInputStream(sourceFile)));

            String readLine = null;
            while ((readLine = fileIn.readLine()) != null) {
                String[] subLine = readLine.split(" ");
                String newClass = subLine[1];
                newClassList.add(newClass.replace(".", "/").trim());
            }
            JarEntry entry = null;
            while ((entry = jarIn.getNextJarEntry()) != null) {
                String fullName = entry.getName();
                String className = entry.getName().substring(0, fullName.lastIndexOf("."));
                if (newClassList.contains(className)) {
                    jarOut.putNextEntry(entry);

                    int len = jarIn.read(bytes);
                    while (len != -1) {
                        jarOut.write(bytes, 0, len);
                        len = jarIn.read(bytes);
                    }
                }
            }
        } finally {
            if (fileIn != null)
                fileIn.close();
            if (jarIn != null)
                jarIn.close();
            if (jarOut != null)
                jarOut.close();

        }
    }
 
  public static void main(String... args) throws IOException {
        Test6 test6 = new Test6();
        test6.doJar("C:\\1\\sourceFile.txt");
    }
}

© 著作权归作者所有

共有 人打赏支持
上一篇: sqoop1.4.6安装配置
下一篇: Java偏量锁
jimyao
粉丝 17
博文 66
码字总数 27856
作品 0
朝阳
私信 提问
Android 3D游戏引擎--Alien3d

Alien3d是一款体积非常之小的Android 3D游戏引擎,基于OpenGL ES技术开发。为了压缩体积,它根据不同功能采用多jar方式发布(包括alien3d-engine.jar,alien3d- tiled.jar,alien3d-sprites...

匿名
2010/08/04
7.1K
0
减少APK体积的一种方法

之前做项目的时候,搭建了一个产品框架,里面包含了即时通讯、Crosswalk以及一些第三方的库,这样做的好处是 在之后的工程中,可以直接使用这个框架来写工程,所需要的功能一键获取。 不过,...

u014527323
2017/02/14
0
0
从 xcarchive 到分发的 ipa

写这篇文章的起因是要更新 app ,然而上传 ipa 文件到 iTunes Connect 时发现体积巨大,是 App Store 显示的体积的好几倍,于是仔细研究了一下,各种体积的文件都是些什么。 各格式简要说明 ...

KyXu
2017/01/26
0
0
Java的JAR文件

JAR文件的全称是Java Archive File,意思就是java档案文件,通常jar文件是一种压缩的文件,与常见的ZIP压缩文件兼容,通常也被称为JAR包。JAR文件和zip文件的区别就在于jar文件默认包含一个名...

西红柿的眼泪
2016/07/09
44
0
Spring Boot 打包,分离依赖jar,配置文件

maven-jar-plugin,负责将应用程序打包成可执行的jar文件 maven-assembly-plugin,负责将整个项目按照自定义的目录结构打成最终的压缩包,方便实际部署 需求1,将依赖的jar提取到可运行的jar...

张欢19933
2018/11/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

搜索引擎(Lucene-索引详解)

IndexWriter详解 问题1:索引创建过程完成什么事? 回顾架构图 Lucene索引创建API 图示 Lucene索引创建代码示例 public static void main(String[] args) throws IOException { // 创建...

这很耳东先生
28分钟前
2
0
JavaScript数据结构之栈实例用法

在本篇文章里小编给大家分享了关于JavaScript数据结构之栈实例用法内容,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 栈 先来看...

前端攻城老湿
39分钟前
1
0
springboot 使用 redis 管理session

1.pom.xml 引入依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency><dependency> ......

狼王黄师傅
39分钟前
1
0
Js取小数点后两位四种方法

在本篇文章里小编给大家分享了关于js取小数点后两位四种方法和实例代码,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 Javascri...

前端攻城小牛
45分钟前
1
0
js 唤端

h5页面唤起app const appDownload = () => { // 分享- 唤起 - 下载function failed() {window.location = '应用商店的scheme '}function transfer(cb) {window.location.href =......

何祯粮
46分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部