標 題: 一鍵安裝雙擊運行——Java安裝程序制作
作 者: Jason Du
時 間: 2009-3-23
原 文: http://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/beansoft/archive/2008/12/19/247321.html
可以運行 RCP/Swing 的迷你JRE 6(3.75MB)
http://m.tkk7.com/beansoft/archive/2008/01/18/176353.html
可以運行SWT的精簡版JRE 1.4.2_04, 壓縮后僅1.3MB
http://m.tkk7.com/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程序。
原文鏈接:http://m.tkk7.com/javapro/archive/2009/03/24/JavaAppSetup.html