熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

如何制作最小的RCP程序壓縮包

2013-11-15 11:50:01  來源: JSP教程 

  如果開發完了一個RCP應用程序要安裝到客戶端那麼這個安裝文件會有多大呢我們當然希望是越小越好

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

  jre 安裝程序 M

  rcp runtime M

  rcp應用程序(包含用到的第三方的lib) 此處假設 M

  那麼將這些文件打成包後的大小將為M左右一個普通的rcp安裝程序居然會有這麼大這實在有點令人難以接受

  難道就不能再小一點嗎?我們多麼希望有一個小巧的RCP安裝程序啊答案是肯定的我們完全可以將RCP安裝程序控制在M以內甚至更小

  此處只介紹如何壓制一個最小的RCP壓縮包至於如何制作安裝程序已經超出了討論的范疇只要有了最小的壓縮包不論用何種安裝程序都可以制作出M以下的RCP安裝程序

  第一步 jre 減肥

  jre安裝程序有M這可是一個大東西客戶想要運行RCP程序首先就要安裝JRE這也是很多客戶反感的jre裡面包含了太多的東西很多是rcp程序根本用不到的比如swing庫如果全是用swt開發swing包就多此一舉了 而且JRE的安裝程序也不見的那麼健壯筆者就曾經兩次遇到在不同的機器上不能成功安裝jre的情況而且通過添加刪除程序也刪不掉非常煩人其實完全沒有必要安裝JRE只需要在rcp安裝目錄下建一個jre目錄裡面包含jre用到的文件就可以了rcp程序啟動時會首先查找當前目錄下有沒有jre目錄如果有就用裡面的jre如果沒有才去注冊表查找jre接下來我們看看這個jre目錄裡面都有哪些東西一些不要的統統刪掉至於刪掉哪些要根據情況而定這個需要反復實驗才能確定哪些有用哪些沒用最後bin目錄筆者保留了必須的dll和exe文件llib目錄裡面只保留了rtjar和charsetsjar這兩個庫但是rtjar還是太大了M既然要減肥那就徹底減到底吧用winrar或者其他解壓縮工具打開rtjar看看哪些包裡面的class不需要就統統刪掉例如客戶端不需要swingjavaxswing包干掉客戶端不需要rmijavaxrmi包干掉刪來刪去最後rtjar變成了多M charsetsjar這個包也挺大M裡面包含了不同的字符集編碼其實很多字符集都用不到根據情況挑選你所用的吧

  到了這一步jre已經瘦了一圈了但還是不能達到我們的目的如果用普通的壓縮工具壓縮jre目錄後基本可以達到多M這離我們的目標還差好大一快呢jre還的減肥這次狠一點拿出我們的殺手武器packpack是java自帶的(在jre\bin\目錄下)一個針對class文件進行壓縮的工具由於專門針對class文件進行了優化壓縮比高的驚人(當然速度也比普通壓縮軟件慢多了)pack的用法請自行參考相關文檔先用pack把rtjar和charsetsjar壓縮一下然後用其他壓縮軟件對jre整個目錄壓縮一下壓縮後的大小讓你吃驚如果用rar壓縮出來的是Mzip高一些M可能是筆者刪的東西太多了所以會這麼小但這裡還包含一個M的charsetsjar文件筆者試過如果不包括charsetjar用rar壓縮後大小為M這實在太驚人了有誰能想象一個只有M的JRE遺憾的是charsetjar是必須的你可以刪掉裡面一些不要的字符集這樣能壓出來的jre也再MM之間必須注意的是解壓縮的時候還要用pack解開壓縮後的jar文件整個步驟就是壓縮兩遍第一遍用pack壓縮所有的jar文件第二遍再用一個其他壓縮軟件壓縮jre目錄這樣就能得到一個很小的jre壓縮包

  看到這裡有人開始懷疑這個M多的JRE能用嗎?筆者就曾將這個jre放到eclipse目錄下eclipse啟動一切正常進去後可以繼續寫我的java代碼還可以編譯java文件(其實eclispe本身不需要toolsjar它自己就帶了一個很強的java編譯器)從cvs下載文件也不成問題試了一圈沒發現有什麼出錯的地方當然包不齊少了那個class文件就會出錯了所以刪除class文件的時候盡量不要多刪如果你很熟悉每個class文件的用途就可以放心的去刪了如果SUN能出一個 MINI JRE 那就更好了

  第二步 RCP插件減肥

  記不清從eclipse起的那個版本已經開始支持將插件打包成一個jar文件甚至這個插件裡面包含著其他的jar文件這在以前只能創建一個插件目錄既然插件可以打包成jar文件那麼pack就派上用場了同壓縮jre一樣此處就不在敘述了

  值的注意的問題是有的插件jar文件裡面包含一個目錄liblib裡面又包含了其他的jar文件那麼用pack對這個插件jar壓縮的時候lib裡面的jar文件是不會壓縮的這個也不是什麼問題只要寫個小程序對lib裡面的jar文件壓縮一下就行了

  筆者實驗的所做的RCP的插件壓縮後的大小為M多這裡面包括rcp runtime 必須的插件以及自己開發的rcp程序用到的第三方庫以及eclipse的一些插件emfgefjfacedatabinding等這些加起來壓縮後總共M多如果你用的插件不是那麼多壓縮後的肯定更小 這樣加上jre整個程序控制在了M以內

  讓人非常討厭的是從eclispeM又加了一個comibmicu的插件這個插件竟然有M多而且這個插件是rcp runtime必須的其實這個插件又是一個和字符集相關的插件裡面很多字符集是程序用不到的除非你的程序要支持多語言但也不會把所有的語言都囊括吧如果每個字符集都能做成一個插件只掛接自己想需要的哪可真是太好不過了希望eclispe會改進這一點


From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19715.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.