jre精簡詳細教程(附精簡工具)

來源:互聯網
上載者:User

 

最近做個了java的傳統型應用程式,可打包發布後才發現要帶一個將近100M的jre,使程式顯得過於臃腫,當務之急就是去精簡jre,現將本人的精簡過程寫出來,以供大家參考!

思路:jre/lib/rt.jar有很多class,但大多數你的程式用不到,利用批處理命令(下文提到的cutJre.bat)可以得到你的程式所用到的class,!

所用到的工具:(1)360壓縮軟體(ps:往壓縮檔裡複製檔案特別方便)

   (2)jre精簡軟體

本人已將上述兩款軟體壓縮,以供大家下載:http://download.csdn.net/detail/pzhtpf/3878285

閑話少說,咱們趕快開始。

1,         咱們建一個新檔案夾,這裡我取名cutJre,將下載的精簡工具解壓到cutJre中,當然360壓縮軟體要安裝,再將jdk中的jre檔案夾複製到cutJre中,再將你的java匯出jar檔案和打包過的exe檔案複製到cutJre中,我這裡的樣本程式是analysis.jar和analysis.exe,此時cutJre檔案夾應包含以下內容:

Ps:一定要齊全,因為cutJRE.exe是本人用java所寫,它的運行要也要基於jre!

1,         準備工作已經做好,這裡所說的精簡就是去精簡jre/lib檔案夾中的rt.jar,因為它最大,有大約46M。咱們開啟cutJre.exe軟體(第一次啟動可能有點慢),根據提示去做,你用軟體匯入後,這時會彈出dos視窗和你的exe檔案,把你的軟體的所有功能使用一遍後,去關閉它們。這時先別急點擊:“產生精簡版JRE”,回到cutJre檔案夾中看看,檔案夾中多了cutJre.bat和class.txt(列出了所用到的class)這兩個檔案,清楚這一點可方便我們以後的操作!

2,         點擊“產生精簡版JRE”,時間可能會有點長,點擊後,請稍等片刻,你可以乾乾其他事,正常的話,會出現:

精簡完後cutJre檔案夾中會多出幾個檔案夾,一般情況下是sun,java,javax,com這幾個檔案夾,在cutJre中建立一個檔案夾,我這裡是cutJre1,然後把jre和你的exe可執行檔,cutJre.bat,你的jar複製到cutJre1中,此時結構如下:

為了方便起見我們把rt.jar複製出來,單獨對它進行操作後,再去替換cutJre/cutJre1/jre/lib/rt.jar,如果你對cutJre/cutJre1/jre/lib/rt.jar直接去操作的話,會提示你此檔案正在使用,無法操作

然後用360壓縮開啟單獨複製出來的rt.jar,去替換相應的檔案夾如:

完成以後,用精簡版的rt.jar去替換cutJre/cutJre1/jre/lib/rt.jar

第一次一般不會成功,然後我們去點擊cutJre1檔案夾中的cutJre.bat去找出缺少的class,會出現以示:

如所示:我們直接把紅色部分所示的用原生態rt.jar檔案夾替換精簡版rt.jar中的檔案夾, 比如說,我們直接把原版re.jar中sun檔案夾中的java2d檔案夾去替換精簡版中相應的檔案夾!,如:

 

比較麻煩的是cutJre.bat不會一次性顯示出所有的缺少的class,所以要我們不斷去實驗!重複以上步驟!

 

待到cutJre不再報錯時,可Exe可執行檔還是打不開,總提示

“Couldn’t load main class”,或其他錯誤,這就是你所使用的打包軟體在作怪了,一般我們都用Exe4j,這時又要我們去替換所用到的類,一般你把java/lang,java/util,java/security這三個檔案夾替換掉,如果還不行,再把sun/reflect,sun/misc,sun/security也替換掉!

經過這麼一折騰,猛然間發現我們的rt.jar由將近47M變成了5M多,總算完成了瘦身!

4,rt.jar裁剪完成後,就要去刪除一些jre中用不到的檔案,首先刪除jre中除bin,lib以外所有的檔案!

然後我們再來給jre中bin檔案夾動手腳,一個一個去刪除,如果是你的程式用到的檔案,電腦會自動提示你此檔案刪除不掉(ps:jre/bin/client這個檔案夾電腦可能會提示你刪不掉,但是它裡面的classes.jsa有13M,它可以被刪掉,在jre/lib中碰到這樣的檔案夾時,你也可以這樣試試)

注意:java.exe這個檔案不要刪!我的jre/bin經過處理後包含如下檔案:

然後再去處理jre/lib檔案夾,方法跟上面一樣,我的jre/lib理後包含如下檔案:

Ps:這些檔案都因你的程式而宜!

 如果程式可以開啟,cutJre.bat中也沒有報錯,可程式的部分功能還是無法使用,這時你可以注意到cutJre檔案夾中有個error.log這個檔案,開啟它,就可以看到缺少的class,同上把相應的檔案夾直接替換即可!

哈哈,最算精簡完畢,程式可正常運行,最後我的精簡過的jre為17M,在可接受範圍之內!

 

 如果還有問題,不能在任意電腦上去運行,那建議你只把rt.jar中的com檔案夾去替換,經過本人的多次實驗,這個檔案夾最大,出問題的機率最小!而bin和lib中的檔案也要小心翼翼的去刪了!

e

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.