Feeling

    三人行,必有我师焉

   ::  :: 新随笔 :: 联系 ::  :: 管理 ::
  185 随笔 :: 0 文章 :: 392 评论 :: 0 Trackbacks
Java应用定制工厂(以下简称为JCB,Java Customization Builder)是一个针对Java轻量级桌面应用进行精简优化的小工具,使用它可以精简你的jar包,并自动生成一个精简的JRE,也可以使用它生成一个Exe启动引导程序,并且能够对你的Java应用自动做Pack200和Unpack200处理。使用本工具定制的Java桌面应用通常不会超过10M(包含JRE),SWT客户端程序相对于Swing客户端程序更小,一般不会超过5M。

JCB是一个Java应用,所以目标机器上必须安装1.5以上版本的JDK用以启动JCB,但是JCB可以用来精简1.4版的JRE,并且JRE1.4精简后的体积远小于1.5以上的版本。

1.新建JCB项目
精简JRE的步骤比较繁琐,有可能精简失败,为了不重复之前的步骤,JCB提供一个项目文件用来保存精简配置信息,扩展名为jcprj。这里我们创建一个项目,名为JCB


Wizard需要输入一个工程名和指定工程位置,至于下面的应用程序位置和定制JRE位置由JCB自动指定,这儿显示出来仅供参考。

此时最好Ctrl+S保存一下项目,否则退出后你之前的配置信息会全部丢失,因为你并没有制定一个可用的项目配置文件。

2. 配置JCB项目


首先指定项目需要的jar文件,然后依次选择项目的main class,启动路径默认为空,一般来说无需指定。然后设定应用程序参数和虚拟机参数。最后选定需要精简的JRE,JCB当前支持1.4-1.7版本的JRE,未来可能会支持更高版本的JRE。

右下角有2个单选按钮:全部重新运行和增量运行。全部重新运行就会放弃之前的运行结果,增量运行就是会保留以前的运行结果。

然后点击“以Verbose模式运行”按钮。Verbose模式运行Java程序,会显示JVM加载的全部类信息,JCB需要这些类信息进行JRE的精简,所以请尽可能的把应用所有的功能尽可能的跑一遍,跑的越全面,导致精简出错的可能性就越低。



Verbose运行结果,这个页面的显示信息仅供参考,无实际用处。

3. 分析项目的类依赖项


分析类依赖模式有2个选项:重新完全分析和增量分析。完全分析会花费较多的时间。当使用verbose模式增量运行后,可以使用增量模式分析类依赖项,这样可以节约大量的时间。类依赖分析会反编译所有运行的类,分析类引用关系,但是无法获取Class.forName这类动态类加载信息,所以需要Verbose模式运行的尽量全面,以避免这些动态加载的类的缺失。

为什么需要分析类依赖关系呢?因为不同的操作系统,不同的硬件配置,JRE可能会采取策略模式加载不同的类,或者一些异常,Verbose模式一般不会加载,这样换个硬件环境,仅仅使用Verbose模式的类可能会导致ClassNotFound这样的异常,导致Java程序崩溃。


4. 精简JRE


精简JRE有两种模式:使用Verbose运行结果和使用类依赖分析结果。前者只包含Verbose分析出来的类,精简出来的JRE包很小,但是基本不具备跨平台性。所以一般来说推荐选择后者。

如果你的程序包含Swing的客户端,并且比较复杂的话,最好选中包含Swing选项。因为Swing的设计完全是动态化的加载,全部使用Class.forName方式,类依赖分析对Swing是无效的。当然选中该选项后,JRE的体积会增加许多。比较好的解决方案,是使用SWT替代Swing进行开发,或者尽量把你的程序跑全面,包括各种异常界面都跑出来。

右下角有两个按钮,是用来自定义类和资源文件的,比如移除JAR包的MD5文件或者无用的文件。或者测试运行发现ClassNotFound异常,手动把缺少的类加进去,然后JCB会自动运行增量类依赖分析加载所有可能需要的类。

选择左上角的“精简Jar包”按钮,就可以对JRE进行精简了,精简完毕后可以点击“查看精简结果”按钮进行查看。

5.定制JRE


上图显示了JRE精简结果,JCB会自动分析所有的Class,生成精简版JRE,包括需要的JAR,DLL和资源文件。一般来说精简出来的JRE,普通功能都能正确完成,但是不排除有些功能不能正常使用,比如缺少某个资源文件或者DLL,需要手工添加。

为了保证精简的正确性,你需要进行运行测试,这一步是必须的,而且最好和Verbose运行模式一样,把所有的功能都跑一遍,确认精简无误。



如果测试运行有误的话,请根据运行错误报告进行分析,如果缺少类,请使用Verbose模式重新运行相应的功能,或者在步骤四手工添加需要的类,然后重新生成依赖的JRE。如果缺少相关的DLL或者资源文件,也请手工添加,并且取消步骤四的“清理工作区选项”,否则每次精简JRE都需要重新手工添加。

到此为止,精简JRE部分就算全部完成了,你最好使用Ctrl+S保存一下结果,以避免下次重做项目。

JCB项目下载地址:http://www.sourceforge.net/projects/jcb
posted on 2013-03-03 17:25 三人行,必有我师焉 阅读(5172) 评论(13)  编辑  收藏

评论

# re: Java应用定制工厂使用手册(一) 2013-03-03 17:44 CYB
先顶再看~~  回复  更多评论
  

# re: Java应用定制工厂使用手册(一)[未登录] 2013-03-04 13:11 zhou
顶上。、。、。、。、、。、。、  回复  更多评论
  

# re: Java应用定制工厂使用手册(一)[未登录] 2013-03-04 13:17 Eric
很好很强大啊~~~~
  回复  更多评论
  

# re: Java应用定制工厂使用手册(一)[未登录] 2013-03-08 17:05 test
这种方式存在很多风险,试用过一次.放弃了!  回复  更多评论
  

# re: Java应用定制工厂使用手册(一) 2013-03-14 17:23 oop
精简JRE时报错了。
ava.lang.NullPointerException: entry
at java.util.zip.ZipFile.getInputStream(ZipFile.java:340)
at java.util.jar.JarFile.getInputStream(JarFile.java:409)
at net.sf.feeling.java.customization.engine.SingleJarPacker.copyData(SingleJarPacker.java:141)
at net.sf.feeling.java.customization.ui.JarSlimPage$19.run(JarSlimPage.java:1222)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)

  回复  更多评论
  

# re: Java应用定制工厂使用手册(一) 2013-04-08 14:30 lpdx111
精简的jre ,无法用 cmd java -jar 运行。  回复  更多评论
  

# re: Java应用定制工厂使用手册(一) 2013-04-09 11:01 三人行,必有我师焉
@lpdx111

manifest.mf 的信息丢失,这应当是个bug, Thanks.
  回复  更多评论
  

# re: Java应用定制工厂使用手册(一) 2013-08-18 16:29 haicom
博主,请问一下那个应用程序参数和虚拟机参数怎么填的?  回复  更多评论
  

# re: Java应用定制工厂使用手册(一)[未登录] 2014-03-25 10:36 joker
@oop
遇到跟你一样的问题了  回复  更多评论
  

# re: Java应用定制工厂使用手册(一) 2015-03-15 16:56 Kissimon
求教,我是无法运行JCB,,提示说找不到java运行环境,但是我的JDK都是正常安装和正确配置了的。,有人遇到这种情况吗?  回复  更多评论
  

# re: Java应用定制工厂使用手册(一) 2015-03-22 17:18 陈华
@Kissimon
我试过,,前天就是这样,今天重装了系统再装JDK就好了。但是还是不太懂怎样用这个软件。加个QQ一起学习,,86967672.。。有使用过的朋友,也希望加QQ指点小弟。。  回复  更多评论
  

# re: Java应用定制工厂使用手册(一)[未登录] 2015-07-23 09:38 leo
@Kissimon
你的JDK是x64的吧,这个JCB只能在x32的JRE上运行.  回复  更多评论
  

# re: Java应用定制工厂使用手册(一) 2016-03-12 16:06 Mr.sun
@oop

请问问题解决了吗,我的也出现了同样的问题  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航:
 
GitHub |  开源中国社区 |  maven仓库 |  文件格式转换