<script type="text/javascript"><!-- google_ad_client = "pub-7343546549496470"; /* 728x90, 大橫幅正文上方 */ google_ad_slot = "4725362798"; google_ad_width = 728; google_ad_height = 90; // --></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
<!--Google 728*90橫幅廣告結束-->
標 題: 一鍵安裝雙擊運行——Java安裝程序制作
作 者: Jason Du
時 間: 2009-3-23
原 文:
http://www.blogjava.net/javapro/archive/2009/03/24/JavaAppSetup.html
對于Java桌面應用來說,比較煩瑣的就是安裝部署問題,如:客戶端是否安裝有jre、jre版本、jre在哪里下載、如何用jre啟動 Java應用等等。不要說剛接觸電腦的人,就算是比較熟悉電腦,如果沒有接觸過Java,面對一個Java應用,如何在Windows下啟動它,估計都會 折騰半天。所以這個是導致Java桌面應用被一些人所討厭的最大原因,Java的優勢是“一次編寫,隨處運行”,跨平臺特性確實很好,但并不是每個人都需 要跨平臺,而且有時候JVM平臺或版本問題也會造成“一次編寫,到處測試”的尷尬。對于固定平臺下的Java應用,最好的方式莫過于帶著JRE,讓用戶輕 松點擊就能運行。下面我們來解決這樣的問題。
針對windows平臺,主要方法是:先將JRE進行精簡,再使用工具exe4j 來解決雙擊運行使用的問題,最后用Inno Setup打包成安裝程序, 這樣一來,我們的Java應用就和普通的windows應用程序一樣了。
本文相關下載
本教程PDF格式文檔
http://www.uushare.com/user/javapro/file/1418624
http://www.rayfile.com/files/7840998c-1824-11de-942b-0014221b798a/
本教程示例程序
http://www.uushare.com/user/javapro/file/1418316
http://www.rayfile.com/files/3ee1f95c-1826-11de-bcfb-0019d11a795f/
exe4j 4.2 注冊版
http://www.uushare.com/user/javapro/file/1418327
http://www.rayfile.com/files/c56bebba-1826-11de-9b55-0019d11a795f/
Inno Setup 漢化增強版 + ISTool漢化 + 反編譯套裝 + ISFD界面設計漢化
http://www.uushare.com/user/javapro/file/1418305
http://www.rayfile.com/files/95c91dd9-1826-11de-89b1-0019d11a795f/
一、精簡JRE
JRE6默認安裝大小大約90M,而一般程序只有幾M甚至幾百K,帶JRE運行,感覺非常不合理,分發與網絡傳輸過程也會大受影響。關于JRE的精簡參照下面幾篇相關文章:
Java程序發布之jre篇
http://www.blogjava.net/gdws/archive/2006/12/25/89898.html
如何制作最小的RCP程序壓縮包(包含JRE)
http://www.eclipseworld.org/bbs/read-cec-tid-5777.html
讓Java程序帶上精簡的jre(附工具)
http://glemir.xplore.cn/archives/200
JRE極限精簡探求手冊[1]——精簡一個Swing的即時戰略游戲
http://cping1982.blog.51cto.com/601635/129630
Java應用——精簡JRE體積的小工具
http://blog.csdn.net/cping1982/archive/2008/09/02/2865198.aspx
JVM rt.jar 精簡工具圖形外殼 0.1
http://www.blogjava.net/beansoft/archive/2008/12/19/247321.html
可以運行 RCP/Swing 的迷你JRE 6(3.75MB)
http://www.blogjava.net/beansoft/archive/2008/01/18/176353.html
可以運行SWT的精簡版JRE 1.4.2_04, 壓縮后僅1.3MB
http://www.blogjava.net/beansoft/archive/2007/03/07/102381.html
總得來說JRE精簡是一個比較復雜的工作,如果不清楚某部分的功能不要輕易進行刪減,否則可能產生一些未知的錯誤。pack200壓縮工具在對某些重新打包過的rt.jar文件壓縮時會產生錯誤,如果使用的話一定要注意控制臺的輸出信息。
二、使用exe4j生成exe可執行文件
下面是我的一個完整Java示例程序 —— TestProcessBar。可以看到示例程序已經附帶了jre , 下面先使用exe4j給它制作一個exe可執行文件(即圖中的TestProcessBar.exe),并指定我們自帶的jre 。
以下是exe4j的啟動界面,點擊Next開始創建配置文件。
接著選擇要創建的exe文件類型,在這里我們選擇第一個,這樣其實是為程序創建一個可以雙擊運行的啟動器,可以保證程序仍具有跨平臺的特性。如果選擇第二個,可以把程序完全編譯成exe文件,可以更好的保護你的程序不被反編譯。
接下來設置程序的短文件名,源文件夾路徑(可以使用exe4j工程文件的相對路徑。這里我的exe4j文件保存在launcher目錄下,所以使用的源路 徑為[..],即上一級目錄),以及要生成的exe文件的存放目錄,exe存放目錄相對路徑為源文件夾,這里我把它指定為當前源文件夾。
接下來,可以給我們即將生成的exe文件起一個名字,如我的“TestProcessBar.exe”,還可以給它指定一個ico類型的圖標,其它按默認就可以了,如圖:
這里我們還可以為要生成的exe文件附加一些信息
接下來的這一步,我們需要把程序中所用到的類路徑添加上去。然后指定程序的啟動類,其它如果沒有必要的話,則按默認即可,點擊+號添加類路徑:
基本上我們所需要用到的jar文件都要添加上去,可以逐個添加上去,也可以添加整個文件夾或者使用系統環境變量,為了使程序能夠隨處運行,強列建議使用相對路徑,并且不要使用環境變量。添加好類路徑之后回到上一步去選擇"Main Class"即可。
接下來先選擇我們的程序所需要的jre版本, 然后便是選擇我們自帶的jre了,這一步不是必須,但是為了更好的分發程序,我們自帶了jre, 所以有必要把我們自帶的jre指定為首選的運行環境,如圖選擇Search sequence
默認情況下程序會去系統的注冊表,環境變量及相關的目錄查找jre,因為我們只需要自帶的jre,所以這里我把默認的選項移除了(如果覺得有必要的話可以把默認的選項放在自帶jre選項的后面,不刪除),然后添加我們自己的jre所在的目錄路徑,點+號開始:
這里還是建議使用相對的目錄路徑:
指定jre所在的目錄,如圖:
最后我的jre目錄路徑就是這樣的:./jre
下面這一步啟動畫面,有興趣的可以自已設置一下。
程序最終生成了這個執行文件: TestProcessBar.exe
現在使用它,已經可以正常利用我們自帶的jre啟動程序了,但是整個程序仍有近19M的大小。
這時候打個壓縮包,已經可以進行發布了。但是為了更大的壓縮,并制作更加方便易用的程序,下面我們使用Inno Setup進行壓縮并制作一個安裝包。
三、使用Inno Setup為程序制作打包安裝程序
安裝后啟動腳本向導,如圖所示:
這里指定程序的啟動文件,即剛才用exe4j創建的exe文件。然后將整個程序目錄都包含進去就可以了(這里因為程序中有一些exe4j和inno setup的工程文件,故有所選擇),接下來的基本上一直按下一步就可以了,其中要設置一下安裝程序的輸出目錄,直到腳本向導完成
然后執行該腳本即可:
然后找到Inno Setup的輸出目錄,就可以看到編譯輸出后的安裝包了,如下圖:setup.exe
大小已經壓到了6.38M。
利用這個就可以快速輕松的安裝你的Java桌面應用了。
|
四、總結
總體來講,我們的目的是為了讓我們編寫出的程序更加的方便易用。通過以上的學習,現在我們已經可以制作出可雙擊運行、不用用戶另裝 jre的、簡單易用的程序安裝包。大家可以對jre精簡、exe啟動器的制作、打包安裝進行更深入的學習。本教程中的工具只是做一個拋磚引玉,還有很多類 似功能的工具有待大家去研究,最后,希望大家能夠制作出屬于自己的簡單明快的一鍵式Java程序。
<script type="text/javascript"><!-- google_ad_client = "pub-7343546549496470"; /* 728x90, 大橫幅正文下方 */ google_ad_slot = "4725362798"; google_ad_width = 728; google_ad_height = 90; // --></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
<!--Google 728*90橫幅廣告結束-->
<script type="text/javascript"><!-- google_ad_client = "pub-7343546549496470"; /* 468x15 橫鏈接單元 */ google_ad_slot = "5785741422"; google_ad_width = 468; google_ad_height = 15; // --></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
<!--新Google 468x15 橫鏈接單元結束-->
<script src="http://www.google.com/reader/ui/publisher.js" type="text/javascript"></script><script src="http://www.google.com/reader/public/javascript/user/00697638153916680411/state/com.google/broadcast?n=5&callback=GRC_p(%7Bc%3A%22green%22%2Ct%3A%22%5Cu8FD9%5Cu4E9B%5Cu6587%5Cu7AE0%5Cu4E5F%5Cu503C%5Cu5F97%5Cu4E00%5Cu770B%22%2Cs%3A%22false%22%7D)%3Bnew%20GRC" type="text/javascript"></script>
<!-- Google Reader shared發布代碼結束 -->
評論
@witbrave
GreenJVM可以實現這個功能,但是不能很好的實現,一般都要自己手動修正需要的class
http://blog.csdn.net/cping1982/archive/2008/09/02/2865198.aspx
http://www.blogjava.net/beansoft/archive/2008/12/19/247321.html
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
