經過一年時間斷斷續續的開發,終于能夠對“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應用程序。:)