`

如何制作最小的RCP程序压缩包(包含JRE)

阅读更多
gdws 原创   更新:2006-12-25 14:43:54  版本: 1.0    
http://www.javaresearch.org/article/60321.htm




如果开发完了一个RCP应用程序,要安装到客户端,那么这个安装文件会有多大呢,我们当然希望是越小越好。

我们先算一下普通方式下的文件大小:

jre1.5 安装程序 16M
rcp3.2 runtime 9M
rcp应用程序(包含用到的第三方的lib) 此处假设 2-3M

  那么将这些文件打成包后的大小将为28M左右,一个普通的rcp安装程序居然会有这么大。这实在有点令人难以接受。

  难道就不能再小一点吗?我们多么希望有一个小巧的RCP安装程序啊。答案是肯定的,我们完全可以将RCP安装程序控制在10M以内,甚至更小。

  此处只介绍如何压制一个最小的RCP压缩包,至于如何制作安装程序,已经超出了讨论的范畴,只要有了最小的压缩包,不论用何种安装程序,都可以制作出10M以下的RCP安装程序。

第一步: jre 减肥

jre1.5安装程序有16M,这可是一个大东西,客户想要运行RCP程序,首先就要安装JRE。这也是很多客户反感的,jre里面包含了太多的东西,很多是rcp程序根本用不到的,比如swing库,如果全是用swt开发,swing包就多此一举了。 而且JRE的安装程序也不见的那么健壮,笔者就曾经两次遇到在不同的机器上不能成功安装jre的情况,而且通过添加删除程序也删不掉,非常烦人。其实完全没有必要安装JRE,只需要在rcp安装目录下建一个jre目录,里面包含jre用到的文件就可以了。rcp程序启动时,会首先查找当前目录下有没有jre目录,如果有,就用里面的jre,如果没有才去注册表查找jre。接下来,我们看看这个jre目录里面都有哪些东西,一些不要的统统删掉,至于删掉哪些,要根据情况而定,这个需要反复实验才能确定哪些有用,哪些没用。最后bin目录笔者保留了必须的dll和exe文件,llib目录里面,只保留了rt.jar和charsets.jar这两个库。但是rt.jar还是太大了32M,既然要减肥,那就彻底减到底吧,用winrar或者其他解压缩工具打开rt.jar,看看哪些包里面的class不需要,就统统删掉。例如,客户端不需要swing,javax.swing包干掉,客户端不需要rmi,javax.rmi包干掉,删来删去,最后rt.jar变成了10多M, charsets.jar这个包也挺大8M,里面包含了不同的字符集编码,其实很多字符集都用不到,根据情况挑选你所用的吧。

到了这一步,jre已经瘦了一圈了,但还是不能达到我们的目的,如果用普通的压缩工具压缩jre目录后,基本可以达到10到12多M。这离我们的目标还差好大一快呢。jre还的减肥,这次狠一点,拿出我们的杀手武器pack200,pack200是java1.5自带的(在jre\bin\目录下)一个针对class文件进行压缩的工具,由于专门针对class文件进行了优化,压缩比高的惊人(当然速度也比普通压缩软件慢多了)pack200的用法请自行参考相关文档
。先用pack200把rt.jar,和charsets.jar压缩一下,然后用其他压缩软件对jre整个目录压缩一下,压缩后的大小让你吃惊,如果用rar,压缩出来的是4M,zip高一些4.8M。可能是笔者删的东西太多了,所以会这么小。但这里还包含一个8M的charsets.jar文件。笔者试过,如果不包括charset.jar,用rar压缩后大小为2.88M,这实在太惊人了,有谁能想象一个只有2.88M的JRE,遗憾的是charset.jar是必须的,你可以删掉里面一些不要的字符集这样能压出来的jre也再3M-4M之间。必须注意的是,解压缩的时候,还要用pack200解开压缩后的jar文件。整个步骤就是压缩两遍,第一遍用pack200压缩所有的jar文件,第二遍再用一个其他压缩软件压缩jre目录。这样就能得到一个很小的jre压缩包。

看到这里,有人开始怀疑,这个3M多的JRE能用吗?笔者就曾将这个jre放到eclipse目录下,eclipse启动一切正常,进去后可以继续写我的java代码,还可以编译java文件(其实eclispe本身不需要tools.jar,它自己就带了一个很强的java编译器),从cvs下载文件也不成问题,试了一圈,没发现有什么出错的地方。当然,包不齐,少了那个class文件,就会出错了,所以删除class文件的时候,尽量不要多删。如果你很熟悉每个class文件的用途,就可以放心的去删了。如果SUN能出一个 MINI JRE 那就更好了。

第二步: RCP插件减肥

  记不清从eclipse3.1起的那个版本,已经开始支持将插件打包成一个jar文件,甚至这个插件里面包含着其他的jar文件,这在3.1以前只能创建一个插件目录。既然插件可以打包成jar文件,那么pack200就派上用场了,同压缩jre一样,此处就不在叙述了。
 
  值的注意的问题是,有的插件jar文件里面包含一个目录lib,lib里面又包含了其他的jar文件,那么用pack200对这个插件jar压缩的时候,lib里面的jar文件是不会压缩的。这个也不是什么问题,只要写个小程序,对lib里面的jar文件压缩一下就行了。

  笔者实验的所做的RCP的插件压缩后的大小为6M多,这里面包括rcp runtime 必须的插件,以及自己开发的rcp程序,用到的第三方库,以及eclipse的一些插件emf,gef,jface-databinding等,这些加起来压缩后总共6M多。如果你用的插件不是那么多,压缩后的肯定更小。 这样加上jre,整个程序控制在了10M以内。

  让人非常讨厌的是,从eclispe3.2M5 起,又加了一个com.ibm.icu的插件,这个插件竟然有3M多,而且这个插件是rcp runtime必须的。其实这个插件又是一个和字符集相关的插件,里面很多字符集是程序用不到的,除非你的程序要支持多语言,但也不会把所有的语言都囊括吧。如果每个字符集都能做成一个插件,只挂接自己想需要的,哪可真是太好不过了。希望eclispe3。3会改进这一点。 

分享到:
评论

相关推荐

    如何制作最小的RCP程序压缩包

    本教程将详细讲解如何制作包含JRE(Java Runtime Environment)的最小RCP程序压缩包。 1. **理解RCP程序结构** RCP程序由一系列插件组成,每个插件负责特定的功能。核心插件通常包含应用程序的主要逻辑,而其他...

    exe4j使用说明(详细)

    - **如何制作最小的RCP程序压缩包(包含JRE)**:介绍了如何针对RCP(Rich Client Platform)应用程序制作最小化的压缩包。 - **让Java程序带上精简的jre(附工具)**:分享了一款实用工具,可以帮助开发者更轻松地...

    根据jdk1.7.0._45精简出来的jre

    本压缩包基于jdk1.7.0._45版本精简而来,专注于提供一个轻量级的JRE,主要适用于那些对系统资源要求严格的场景,如Rich Client Platform(RCP)应用的打包和运行。 JDK 1.7.0._45是Oracle公司发布的Java ...

    exe4j的详细使用方法中文版

    - 参考文章:《Java程序发布之jre篇》、《如何制作最小的RCP程序压缩包(包含JRE)》等。 - 工具推荐:JVMrt.jar精简工具图形外壳、JRE极限精简探求手册等。 - **注意事项**: - 在进行JRE精简时,务必确保理解...

    eclipse-inst-jre-linux64.tar.gz

    标题 "eclipse-inst-jre-linux64.tar.gz" 指的是一个针对64位Linux操作系统的Eclipse集成开发环境(IDE)的安装程序压缩包,其中包含了Java运行时环境(JRE)。这个文件的扩展名 ".tar.gz" 表明它是一个使用tar工具...

    rcp 学习资料下载,一个简单的rcp例子

    7. **.classpath**: 项目的类路径配置,包括JRE和库的引用。 学习这个RCP例子,你可以从以下几个方面入手: 1. **环境搭建**: 安装Eclipse IDE for RCP and RAP Developers,并创建一个新的RCP项目。 2. **理解...

    RCP做的英语小游戏

    RCP 应用程序通常包括一个用户界面框架,开发者可以在此基础上构建自己的功能模块。 描述中提到“里面已经包含精简的 jre,不用配置就可以直接运行”,这意味着游戏包内集成了轻量级的 Java 运行环境(Java Runtime...

    eclipse-rcp-indigo-SR2-win32-x86_64

    在"eclipse-rcp-indigo-SR2-win32-x86_64"压缩包中,"eclipse"文件夹包含了运行Eclipse RCP应用所需的全部资源,包括JRE(Java Runtime Environment)、Eclipse插件、工作台配置、启动脚本等。用户可以通过运行...

    eclipse-rcp-photon-RC3-win32-x86_641(含SVN及兼容低版本插件)

    7. **安装与配置**: 用户需要运行这个压缩包内的Eclipse安装程序来设置工作环境,包括设置Java运行时环境(JRE/JDK)、导入或创建项目、安装额外的插件等。 8. **使用场景**: Eclipse RCP广泛应用于软件开发,尤其...

    eclipse-rcp-2023-09-R-linux-gtk-x86-64.tar.gz

    压缩包中的“eclipse”文件夹包含的是Eclipse RCP的完整安装内容。解压后,用户可以找到Eclipse的启动脚本、工作台配置、插件库以及各种必要的资源文件。Eclipse RCP的核心在于其插件机制,每个功能模块都是一个独立...

    RCPProject.rar

    RCPProject.rar是一个压缩包文件,其名称暗示它可能包含一个基于Eclipse Rich Client Platform (RCP)的项目。RCP是Eclipse框架的一部分,它允许开发者构建功能丰富的桌面应用程序,具有可扩展性和模块化特性。这个...

    eclipse-inst-win64.zip

    "eclipse-inst-win64.zip"是一个专为Windows 64位操作系统设计的Eclipse安装程序压缩包。本文将详细介绍这个压缩包的内容以及如何在Windows系统中安装和使用Eclipse。 首先,让我们来看看压缩包的标签"Eclipse-inst...

    myeclipse-Register_运行class文件.rar

    2. **Java类运行**:Java程序通常由主类(包含`public static void main(String[] args)`方法)启动。在MyEclipse中,用户可以通过右键点击源文件,选择“Run As”-> "Java Application"来运行一个类。 3. **插件和...

    Eclipse各个版本下载以及基础配置

    5. **配置构建路径**: 对于Java项目,需要配置构建路径,包括源代码目录、库(JRE System Library)、输出目录等。这可以在项目右键菜单中找到。 6. **设置JRE**: 在"Window" -> "Preferences" -> "Java" -> ...

    eclipse-SDK-3.4.2-win32.7z

    JAVA”强调了这个Eclipse版本是针对Java开发的SDK,其中包含了开发Java应用程序所需的所有组件,包括JDT(Java Development Tools)和其他必要的插件。 从压缩包子文件的文件名称列表来看,“0c89f12164165e976aa0...

    activiti designer插件emf

    JAR文件是Java应用程序的打包方式,它包含了类文件、资源文件和其他元数据。在Activiti Designer中,这些jar文件包含插件所需的类库和依赖,例如Activiti的工作流引擎API、EMF的相关库以及图形用户界面所需的组件。 ...

Global site tag (gtag.js) - Google Analytics