Feeling

    三人行,必有我师焉

   ::  :: 新随笔 :: 联系 ::  :: 管理 ::
  185 随笔 :: 0 文章 :: 392 评论 :: 0 Trackbacks
经过一年时间断断续续的开发,终于能够对“Java应用定制工厂”这个项目Release了。

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

精简JRE网上已经有很多文章了,但是实际操作上却有一个严重的弊端,很容易抛出
NoClassDefDoundErr , 这个Error基本上是致命的,一旦发生,Java程序就会崩溃。通常产生这种Error是由于Verbose模式下运行没有考虑到的异常状况导致的,所以Verbose模式得到的结果十分的不可靠,需要对其作进一步的加工。JCB的处理手段是针对Verbose结果进行反编译处理,找出这些class文件的依赖关系,并将这些被依赖的类也做打包处理,这样就能杜绝95%以上的
NoClassDefDoundErr错误。这里需要考虑的是Java的类动态加载机制,通过这种机制加载的类只能用Verbose模式获得,SWT中没有使用这种方式加载class,但是Swing,JDBC,XML框架,Eclipse框架等一些结构比较巧妙的框架中则大量运用了动态加载,所以如果你确认你的代码中包含了这些框架,那么你就老老实实把基本功能都跑一遍吧。

得到了Java应用程序需要的class文件之后,就需要对JRE进行精简的处理。JCB会对常用的一些Class作分析,判断那些dll库是必须的,一般来说轻量级的Java应用,JCB完全能做到自动处理,JCB并没有处理重量级Java应用的机制,比如RMI之类。不过JVM一般都会对缺少的库做出提示,你也可以根据这些提示将缺少的dll添加到精简后的JRE中。

现在Java应用的Jar包和JRE都被精简了,下一步就是生成可以执行的exe文件了,大家常用的软件是exe4j,不过JCB提供了一些比exe4j更强大的功能。JCB生成的exe可以把外部参数通过exe传递给Java应用,这样你就可以制作一个关联扩展名的Java应用程序了。JCB还可以针对Java应用做Pack200处理,Pack200能够极大的压缩jar文件,为什么JRE安装包只有16M左右,而一个rt.jar都有40多M,原因就在于此。JCB是通过Au3脚本来生成exe文件的,你也可以自己修改JCB生成的Au3脚本,定制你自己需要的行为。

默认情况下JCB生成的exe会首先读取注册表,寻找符合条件的JRE,优先级是JDK>JRE>自带JRE,如果一个都没找到,会弹出提示对话框。

JCB下载地址:http://sourceforge.net/projects/jcb/files/JCB_1.0.0.zip/download



PS:JCB本身就是一个JCB生成的Java应用程序。:)

posted on 2011-12-12 16:27 三人行,必有我师焉 阅读(6217) 评论(12)  编辑  收藏

评论

# re: Java应用定制工厂--定制你自己的Java桌面程序 2011-12-12 22:16 tbw淘宝
win都可以的噢。  回复  更多评论
  

# re: Java应用定制工厂--定制你自己的Java桌面程序 2011-12-13 19:54 蜡人
很需要这样的软件,谢谢了。  回复  更多评论
  

# re: Java应用定制工厂--定制你自己的Java桌面程序 2011-12-26 17:01 wqeq
报错,报Can't find bundle for base name CalendarData,locale zh_CN,怎么办呀?  回复  更多评论
  

# re: Java应用定制工厂--定制你自己的Java桌面程序 2011-12-26 21:56 三人行,必有我师焉
@wqeq

是软件报错,还是你自己生成的程序报错?

我测试过好几种环境,都没有遇到过你说的这种情况。如果是软件错误,可能是你的JRE版本有问题。如果是你自己生成的程序有错,那么考虑jre下的ext目录里的localedata.jar是否被引用,如果被移除的话,会导致国际化失败的问题。
  回复  更多评论
  

# re: Java应用定制工厂--定制你自己的Java桌面程序 2011-12-28 22:33 拉风男子
从楼主自己的介绍看,做的相当不错,友情支持下

在公司内使用的话,要求用户安装一套JRE是比较合理的要求,所以我个人采用了这样一种方案。就是仅发布软件的jar包,不带JRE。然后用汇编写了一个引导程序,该程序会到注册表查找用户有没有安装我定制的一套JRE,如果没有,就自动从公司内网下载并安装,因为JRE可以做成绿色版,又是内网,所以下载安装往往十几秒即可搞定。安装完成后程序就可以继续执行了。

这样还有一个好处,就是用户安装了我多个软件的话,因为用的都是同一套我定制的JRE,实际上对磁盘空间消耗最小。并且因为不带JRE,软件安装包可以做的非常小。  回复  更多评论
  

# re: Java应用定制工厂--定制你自己的Java桌面程序 2012-01-31 23:04 isml
不错的程序,很符合我的要求,请问是否开源?  回复  更多评论
  

# re: Java应用定制工厂--定制你自己的Java桌面程序 2012-03-23 11:59 simpleman
今天使用了下,真的挺好用的,正好解决了我打包的要求,谢谢了。 我在使用exe4j的时候,有一个小功能,可以自动扫描某个文件夹下面的jar包,并且加载里面的类。不知道加这个功能是否很麻烦。  回复  更多评论
  

# re: Java应用定制工厂--定制你自己的Java桌面程序[未登录] 2012-04-08 19:57 smile
很漂亮的软件!速度稍微有点慢,看上去依赖分析得很细,其实有时候并不需要这么细,也许可以加一些粗一点的选项,比方用到了swing就自动把已知的一些基础类全加进去,只分析那些高级类的依赖关系,如果选择“不使用swing”,则自动去掉所有swing类  回复  更多评论
  

# re: Java应用定制工厂--定制你自己的Java桌面程序 2012-05-18 11:57 jacket
verbose 模式的时候是调用用java.exe执行程序 调试的 一切正常但打包成exe后

exe调用的好像是javaw.exe执行程序 当我的程序运行到一个功能是 程序突然挂掉了

初步测试是缺少class 但程序使用java.exe时就不会出现程序突然挂掉的问题

实在是费解  回复  更多评论
  

# re: Java应用定制工厂--定制你自己的Java桌面程序 2014-01-07 20:19 路过
软件设计得不错,不过生成的exe文件没有处理jar文件,jar文件还是暴露了,不如exe4j,这样容易被人得到源代码,这是一个败笔.  回复  更多评论
  

# re: Java应用定制工厂--定制你自己的Java桌面程序 2014-06-17 22:19 高阳
作者你好,我想知道我想知道“应用程序参数:”这个怎么写,是不是应该写成如下格式:
set myvar=xxxx  回复  更多评论
  

# re: Java应用定制工厂--定制你自己的Java桌面程序 2015-05-28 20:40 sunbufu
你好,我的电脑现在用的是java1.8,运行不了你的程序啦,:(,好不开心,这么牛叉的程序竟然用不了,好不爽啊==============================,如果可以请联系我谢谢。784398894@qq.com  回复  更多评论
  


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


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