文档章节

JAR文件最小体积发布

jimyao
 jimyao
发布于 2016/01/27 23:21
字数 267
阅读 7
收藏 0
点赞 1
评论 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");
    }
}

© 著作权归作者所有

共有 人打赏支持
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
CHMWriter V3.0 版本发布

在情人节发布这个版本,onz... CHMWriter V3.0较上个版本改进的地方在于: 1)替换了底层ORM库. 由体积庞大的Hibernate改为小巧灵活的iBatis. 软件压缩包体积,直接从7.6M降为2.7M. 2)彻底解决了...

smilethat
2013/02/14
3.8K
6
从 xcarchive 到分发的 ipa

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

KyXu
2017/01/26
0
0
减少APK体积的一种方法

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

u014527323
2017/02/14
0
0
Java的JAR文件

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

西红柿的眼泪
2016/07/09
44
0
Java Ultra-Lite Persistence 3.0.2 发布

Java Ultra-Lite Persistence 3.0.2 发布了,该版本修复了一些小bug,并作了一些优化;其发行版包含为 NetBeans 项目结构的源码、jar包和示例。 Java Ultra-Lite Persistence 是一个非常小的...

红薯
2011/10/09
653
1
J2ME GUI实战之一 ----------LWUIT简介

本文来自:http://blog.csdn.net/hellogv/ ,转载必须注明出处! 首先,想让大家看看LWUIT可以做出什么界面: 这种界面,用J2ME-Polish也不难做出来,但是作者我更喜欢LWUIT,因为她发展得很...

晨曦之光
2012/03/14
145
0
Webit Script 1.5 发布,java模板引擎

距Webit Script 第一个版本 0.8 释出以来,第一代 Webit Script 已经有一年整的时间,今天我们发布1.5,作为第一代的最后一个大版本。 为第一代画上一个完美的句号,我们在1.5版本上下了很大...

zqq90
2014/09/03
2.2K
7
动态/静态站点Web容器,可用于开发轻应用,控制硬件,家庭智能核心等--ThinServer

ThinServer是基于JDK提供的HttpServer开发的Web服务容器,体积小,主程序jar包只有24k。应用开发简单只需要实现com.sanluan.server.application.ThinInitializer,com.sanluan.server.servle...

kerneler
2015/12/03
963
0
maven学习(下)利用Profile构建不同环境的部署包

接上回继续,项目开发好以后,通常要在多个环境部署,象我们公司多达5种环境:本机环境(local)、(开发小组内自测的)开发环境(dev)、(提供给测试团队的)测试环境(test)、预发布环境(pre)、正式...

Carl_
2015/06/08
0
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

一款成功的全球服游戏该如何进行架构选型与设计?

全球服游戏如今正在成为出海游戏的主要考虑模式,跨国对战、全球通服打破国界的限制,将不同地区不同语言的玩家放在一起合作/竞技,成功吸引了大量玩家的关注,并逐渐成为主流的游戏玩法。 ...

UCloudTech
2分钟前
0
0
StringUtils类中isEmpty与isBlank的区别

org.apache.commons.lang.StringUtils类提供了String的常用操作,最为常用的判空有如下两种isEmpty(String str)和isBlank(String str)。 StringUtils.isEmpty(String str) 判断某字符串是否为...

说回答
15分钟前
0
0
react native使用redux快速上手

看例图 要求点击组件一中的按钮,改版组件二的背景色。 利用state和props和容易实现。 //app.jsimport React, {Component} from 'react';import {StyleSheet, Button, View, Text} from ...

燕归南
16分钟前
0
0
页面输出JSON格式数据

package com.sysware.utils;import java.io.IOException;import javax.servlet.ServletResponse;import org.apache.log4j.Logger;import com.sysware.SyswareConstant;pub......

AK灬
38分钟前
0
0
springCloud-2.搭建Eureka Client的使用

1.使用IDEA,Spring Initializr创建 2.填写项目资料 3.选择spring boot版本,插件选择Cloud Discovery→Eureka Discovery 4.选择保存地址 5.修改application.yml eureka: client: s...

贺小康
41分钟前
0
0
CenOS 6.5 RPM 安装 elasticsearch 6.3.1

下载 wget --no-check-certificate https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.1.rpm...

阿白
43分钟前
0
0
1.4 创建虚拟机&1.5 安装CentOS7&1.6 配置ip(上)&1.7 配置ip(下)

1.4 创建虚拟机 知识点 虚拟机网络链接模式 桥连 直接将虚拟网卡桥接到一个物理网卡上面。需要手工为虚拟系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主...

小丑鱼00
50分钟前
0
0
TrustAsia(亚洲诚信)助力看雪2018安全开发者峰会

2018年7月21日,看雪2018安全开发者峰会在北京国家会议中心圆满落下帷幕。拥有18年悠久历史的老牌安全技术社区——看雪学院联手国内最大开发者社区CSDN,汇聚业内顶尖的安全开发者和技术专家...

亚洲诚信
51分钟前
0
0
Spring注解介绍

@Resource、@AutoWired、@Qualifier 都用来注入对象。其中@Resource可以以 name 或 type 方式注入,@AutoWired只能以 type 方式注入,@Qualifier 只能以 name 方式注入。 但它们有一些细微区...

lqlm
今天
0
0
32位汇编在64位Ubuntu上的汇编和连接

本教程使用的操作系统是Ubuntu Linux 18.04 LTS版本,汇编器是GNU AS(简称as),连接器是GNU LD(简称ld)。 以下是一段用于检测CPU品牌的汇编小程序(cpuid2.s): .section .dataoutput...

ryanliue
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部