JavaPro

          On the Java Road
          隨筆 - 26, 文章 - 0, 評(píng)論 - 63, 引用 - 0
          數(shù)據(jù)加載中……

          一鍵安裝雙擊運(yùn)行——Java安裝程序制作

          標(biāo) 題: 一鍵安裝雙擊運(yùn)行——Java安裝程序制作
          作 者: Jason Du
          時(shí) 間: 2009-3-23
          原 文: http://www.aygfsteel.com/javapro/archive/2009/03/24/JavaAppSetup.html 

            對(duì)于Java桌面應(yīng)用來(lái)說(shuō),比較煩瑣的就是安裝部署問(wèn)題,如:客戶端是否安裝有jre、jre版本、jre在哪里下載、如何用jre啟動(dòng)Java應(yīng)用等等。不要說(shuō)剛接觸電腦的人,就算是比較熟悉電腦,如果沒(méi)有接觸過(guò)Java,面對(duì)一個(gè)Java應(yīng)用,如何在Windows下啟動(dòng)它,估計(jì)都會(huì)折騰半天。所以這個(gè)是導(dǎo)致Java桌面應(yīng)用被一些人所討厭的最大原因,Java的優(yōu)勢(shì)是“一次編寫,隨處運(yùn)行”,跨平臺(tái)特性確實(shí)很好,但并不是每個(gè)人都需要跨平臺(tái),而且有時(shí)候JVM平臺(tái)或版本問(wèn)題也會(huì)造成“一次編寫,到處測(cè)試”的尷尬。對(duì)于固定平臺(tái)下的Java應(yīng)用,最好的方式莫過(guò)于帶著JRE,讓用戶輕松點(diǎn)擊就能運(yùn)行。下面我們來(lái)解決這樣的問(wèn)題。

            針對(duì)windows平臺(tái),主要方法是:先將JRE進(jìn)行精簡(jiǎn),再使用工具exe4j 來(lái)解決雙擊運(yùn)行使用的問(wèn)題,最后用Inno Setup打包成安裝程序, 這樣一來(lái),我們的Java應(yīng)用就和普通的windows應(yīng)用程序一樣了。

          本文相關(guān)下載

          本教程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 注冊(cè)版
          http://www.uushare.com/user/javapro/file/1418327
          http://www.rayfile.com/files/c56bebba-1826-11de-9b55-0019d11a795f/

          Inno Setup 漢化增強(qiáng)版 + ISTool漢化 + 反編譯套裝 + ISFD界面設(shè)計(jì)漢化
          http://www.uushare.com/user/javapro/file/1418305
          http://www.rayfile.com/files/95c91dd9-1826-11de-89b1-0019d11a795f/


          一、精簡(jiǎn)JRE


            JRE6默認(rèn)安裝大小大約90M,而一般程序只有幾M甚至幾百K,帶JRE運(yùn)行,感覺(jué)非常不合理,分發(fā)與網(wǎng)絡(luò)傳輸過(guò)程也會(huì)大受影響。關(guān)于JRE的精簡(jiǎn)參照下面幾篇相關(guān)文章:

          Java程序發(fā)布之jre篇
          http://www.aygfsteel.com/gdws/archive/2006/12/25/89898.html

          如何制作最小的RCP程序壓縮包(包含JRE)
          http://www.eclipseworld.org/bbs/read-cec-tid-5777.html

          讓Java程序帶上精簡(jiǎn)的jre(附工具)
          http://glemir.xplore.cn/archives/200

          JRE極限精簡(jiǎn)探求手冊(cè)[1]——精簡(jiǎn)一個(gè)Swing的即時(shí)戰(zhàn)略游戲
          http://cping1982.blog.51cto.com/601635/129630

          Java應(yīng)用——精簡(jiǎn)JRE體積的小工具
          http://blog.csdn.net/cping1982/archive/2008/09/02/2865198.aspx

          JVM rt.jar 精簡(jiǎn)工具圖形外殼 0.1
          http://www.aygfsteel.com/beansoft/archive/2008/12/19/247321.html

          可以運(yùn)行 RCP/Swing 的迷你JRE 6(3.75MB)
          http://www.aygfsteel.com/beansoft/archive/2008/01/18/176353.html

          可以運(yùn)行SWT的精簡(jiǎn)版JRE 1.4.2_04, 壓縮后僅1.3MB
          http://www.aygfsteel.com/beansoft/archive/2007/03/07/102381.html

            總得來(lái)說(shuō)JRE精簡(jiǎn)是一個(gè)比較復(fù)雜的工作,如果不清楚某部分的功能不要輕易進(jìn)行刪減,否則可能產(chǎn)生一些未知的錯(cuò)誤。pack200壓縮工具在對(duì)某些重新打包過(guò)的rt.jar文件壓縮時(shí)會(huì)產(chǎn)生錯(cuò)誤,如果使用的話一定要注意控制臺(tái)的輸出信息。

          二、使用exe4j生成exe可執(zhí)行文件

            下面是我的一個(gè)完整Java示例程序 —— TestProcessBar??梢钥吹绞纠绦蛞呀?jīng)附帶了jre , 下面先使用exe4j給它制作一個(gè)exe可執(zhí)行文件(即圖中的TestProcessBar.exe),并指定我們自帶的jre 。


           
          以下是exe4j的啟動(dòng)界面,點(diǎn)擊Next開(kāi)始創(chuàng)建配置文件。
           


          接著選擇要?jiǎng)?chuàng)建的exe文件類型,在這里我們選擇第一個(gè),這樣其實(shí)是為程序創(chuàng)建一個(gè)可以雙擊運(yùn)行的啟動(dòng)器,可以保證程序仍具有跨平臺(tái)的特性。如果選擇第二個(gè),可以把程序完全編譯成exe文件,可以更好的保護(hù)你的程序不被反編譯。



          接下來(lái)設(shè)置程序的短文件名,源文件夾路徑(可以使用exe4j工程文件的相對(duì)路徑。這里我的exe4j文件保存在launcher目錄下,所以使用的源路徑為[..],即上一級(jí)目錄),以及要生成的exe文件的存放目錄,exe存放目錄相對(duì)路徑為源文件夾,這里我把它指定為當(dāng)前源文件夾。



          接下來(lái),可以給我們即將生成的exe文件起一個(gè)名字,如我的“TestProcessBar.exe”,還可以給它指定一個(gè)ico類型的圖標(biāo),其它按默認(rèn)就可以了,如圖:


           
          這里我們還可以為要生成的exe文件附加一些信息



          接下來(lái)的這一步,我們需要把程序中所用到的類路徑添加上去。然后指定程序的啟動(dòng)類,其它如果沒(méi)有必要的話,則按默認(rèn)即可,點(diǎn)擊+號(hào)添加類路徑:


           
          基本上我們所需要用到的jar文件都要添加上去,可以逐個(gè)添加上去,也可以添加整個(gè)文件夾或者使用系統(tǒng)環(huán)境變量,為了使程序能夠隨處運(yùn)行,強(qiáng)列建議使用相對(duì)路徑,并且不要使用環(huán)境變量。添加好類路徑之后回到上一步去選擇"Main Class"即可。



          接下來(lái)先選擇我們的程序所需要的jre版本, 然后便是選擇我們自帶的jre了,這一步不是必須,但是為了更好的分發(fā)程序,我們自帶了jre, 所以有必要把我們自帶的jre指定為首選的運(yùn)行環(huán)境,如圖選擇Search sequence


           
          默認(rèn)情況下程序會(huì)去系統(tǒng)的注冊(cè)表,環(huán)境變量及相關(guān)的目錄查找jre,因?yàn)槲覀冎恍枰詭У膉re,所以這里我把默認(rèn)的選項(xiàng)移除了(如果覺(jué)得有必要的話可以把默認(rèn)的選項(xiàng)放在自帶jre選項(xiàng)的后面,不刪除),然后添加我們自己的jre所在的目錄路徑,點(diǎn)+號(hào)開(kāi)始:


           
          這里還是建議使用相對(duì)的目錄路徑:



          指定jre所在的目錄,如圖:



          最后我的jre目錄路徑就是這樣的:.\jre


           
          下面這一步啟動(dòng)畫面,有興趣的可以自已設(shè)置一下。


           
          程序最終生成了這個(gè)執(zhí)行文件: TestProcessBar.exe
          現(xiàn)在使用它,已經(jīng)可以正常利用我們自帶的jre啟動(dòng)程序了,但是整個(gè)程序仍有近19M的大小。
          這時(shí)候打個(gè)壓縮包,已經(jīng)可以進(jìn)行發(fā)布了。但是為了更大的壓縮,并制作更加方便易用的程序,下面我們使用Inno Setup進(jìn)行壓縮并制作一個(gè)安裝包。




          三、使用Inno Setup為程序制作打包安裝程序

          安裝后啟動(dòng)腳本向?qū)?,如圖所示: 
           




          這里指定程序的啟動(dòng)文件,即剛才用exe4j創(chuàng)建的exe文件。然后將整個(gè)程序目錄都包含進(jìn)去就可以了(這里因?yàn)槌绦蛑杏幸恍〆xe4j和inno setup的工程文件,故有所選擇),接下來(lái)的基本上一直按下一步就可以了,其中要設(shè)置一下安裝程序的輸出目錄,直到腳本向?qū)瓿?br />






          然后執(zhí)行該腳本即可:



          然后找到Inno Setup的輸出目錄,就可以看到編譯輸出后的安裝包了,如下圖:setup.exe
          大小已經(jīng)壓到了6.38M。
           

          利用這個(gè)就可以快速輕松的安裝你的Java桌面應(yīng)用了。
           



          四、總結(jié)
            總體來(lái)講,我們的目的是為了讓我們編寫出的程序更加的方便易用。通過(guò)以上的學(xué)習(xí),現(xiàn)在我們已經(jīng)可以制作出可雙擊運(yùn)行、不用用戶另裝jre的、簡(jiǎn)單易用的程序安裝包。大家可以對(duì)jre精簡(jiǎn)、exe啟動(dòng)器的制作、打包安裝進(jìn)行更深入的學(xué)習(xí)。本教程中的工具只是做一個(gè)拋磚引玉,還有很多類似功能的工具有待大家去研究,最后,希望大家能夠制作出屬于自己的簡(jiǎn)單明快的一鍵式Java程序。
          原文鏈接:http://www.aygfsteel.com/javapro/archive/2009/03/24/JavaAppSetup.html

          posted on 2009-03-24 14:14 Jason Du 閱讀(18231) 評(píng)論(14)  編輯  收藏 所屬分類: Java

          評(píng)論

          # re: 一鍵安裝雙擊運(yùn)行——Java安裝程序制作  回復(fù)  更多評(píng)論   

          精簡(jiǎn)JRE這塊不錯(cuò),不過(guò)如果有工作來(lái)直接程序運(yùn)行所有過(guò)程中所用到的jar全部提取并精簡(jiǎn)化那就更好。不過(guò)好像有協(xié)議約束,不允許JDK刪減。
          2009-03-24 14:40 | witbrave

          # re: 一鍵安裝雙擊運(yùn)行——Java安裝程序制作  回復(fù)  更多評(píng)論   

          @witbrave
          GreenJVM可以實(shí)現(xiàn)這個(gè)功能,但是不能很好的實(shí)現(xiàn),一般都要自己手動(dòng)修正需要的class
          http://blog.csdn.net/cping1982/archive/2008/09/02/2865198.aspx
          http://www.aygfsteel.com/beansoft/archive/2008/12/19/247321.html
          2009-03-24 14:46 | Jason Du

          # re: 一鍵安裝雙擊運(yùn)行——Java安裝程序制作  回復(fù)  更多評(píng)論   

          你好~~~

          請(qǐng)教一個(gè)問(wèn)題...

          你的系統(tǒng)是英文版的嗎?看你運(yùn)行的中文軟件都很正常呢...

          我之前的時(shí)候也裝過(guò)純英文版的Windows XP系統(tǒng)...但是對(duì)中文支持有問(wèn)題呢...有的中文軟件都是亂碼呢...不知道你是怎么弄的呢?

          2009-03-26 17:32 | Bomber

          # re: 一鍵安裝雙擊運(yùn)行——Java安裝程序制作  回復(fù)  更多評(píng)論   

          to Bomber
          應(yīng)該是操作系統(tǒng)的問(wèn)題。打個(gè)比方,我想顯示德文,那就安裝德文語(yǔ)言支持文件。就好比Linux系統(tǒng)安裝時(shí)有支持語(yǔ)言選項(xiàng)讓你選擇。
          如果你有操作系統(tǒng)盤,去google下英文xp系統(tǒng)添加中文支持。
          比如“使英文操作系統(tǒng)支持中文”有一篇。
          2009-03-26 17:48 | witbrave

          # re: 一鍵安裝雙擊運(yùn)行——Java安裝程序制作  回復(fù)  更多評(píng)論   

          reterterterter
          2009-03-26 18:22 | yer

          # re: 一鍵安裝雙擊運(yùn)行——Java安裝程序制作  回復(fù)  更多評(píng)論   

          @Bomber
          安裝系統(tǒng)的時(shí)候有一步是區(qū)域和語(yǔ)言選項(xiàng),在語(yǔ)言選項(xiàng)里面把最下面的安裝東亞語(yǔ)言選項(xiàng)選上。安裝完成后在區(qū)域語(yǔ)言選項(xiàng)里把相關(guān)項(xiàng)都設(shè)置成 Chinese (PRC) 這樣就可以了
          2009-03-27 08:30 | Jason Du

          # re: 一鍵安裝雙擊運(yùn)行——Java安裝程序制作  回復(fù)  更多評(píng)論   

          比較郁悶的問(wèn)題是exe4j是要收費(fèi)的,
          2009-03-27 14:54 | wavefly

          # re: 一鍵安裝雙擊運(yùn)行——Java安裝程序制作  回復(fù)  更多評(píng)論   

          @wavefly
          請(qǐng)認(rèn)真看文章,這里提供了注冊(cè)版本
          2009-03-27 17:30 | Jason Du

          # re: 一鍵安裝雙擊運(yùn)行——Java安裝程序制作[未登錄](méi)  回復(fù)  更多評(píng)論   

          這樣子就方便很多了,呵呵,再不用一點(diǎn)一點(diǎn)的安裝環(huán)境配置了
          不過(guò)我已經(jīng)要先放開(kāi)java了,有時(shí)間的時(shí)候得拿起C來(lái),這骨頭不好啃
          2009-03-29 11:39 | 阿俊

          # re: 一鍵安裝雙擊運(yùn)行——Java安裝程序制作[未登錄](méi)  回復(fù)  更多評(píng)論   

          很全啊,太強(qiáng)大了,謝謝你啦
          2009-06-19 23:07 | 小楊

          # re: 一鍵安裝雙擊運(yùn)行——Java安裝程序制作[未登錄](méi)  回復(fù)  更多評(píng)論   

          所用到的jar怎么提取啊?
          2009-07-29 17:15 | zou

          # re: 一鍵安裝雙擊運(yùn)行——Java安裝程序制作  回復(fù)  更多評(píng)論   

          樓主
          我用exe4j將我的jar和精簡(jiǎn)后的jre制作exe文件,兩種模式都試過(guò)了,在運(yùn)行時(shí) 都提示是“couldn't load main class ” ,單獨(dú)運(yùn)行自己的jar文件是沒(méi)有問(wèn)題的。
          如有時(shí)間請(qǐng)賜教?。?
          郵箱:zhanghw0917@163.com

          盼望賜教 ?。?
          2009-12-09 16:03 | zhw

          # re: 一鍵安裝雙擊運(yùn)行——Java安裝程序制作  回復(fù)  更多評(píng)論   

          遇到一個(gè)問(wèn)題。

          用exe4j,選擇到“最后我的jre目錄路徑就是這樣的:.\jre”,這步的時(shí)候,都沒(méi)有問(wèn)題。

          但是最后生成的exe文件,明顯沒(méi)有10多M大,只有160多k。我認(rèn)為是jre沒(méi)有被打包進(jìn)去啊。

          什么原因呢?求助。
          2010-06-17 18:38 | hover

          # re: 一鍵安裝雙擊運(yùn)行——Java安裝程序制作  回復(fù)  更多評(píng)論   

          博主你好,非常感謝你提供了這么細(xì)致教程以及樣例程序。
          我把程序放在沒(méi)有安裝JVM的XP系統(tǒng)下,Setup之后的程序無(wú)法執(zhí)行,報(bào):
          “the jvm could not be started The main method may have thrown”,也就是說(shuō),無(wú)論jar再怎么被打包,再怎么被精簡(jiǎn),在運(yùn)行這些精簡(jiǎn)打包的系統(tǒng)中,還是脫不開(kāi)java環(huán)境的束縛,還是需要先安裝好jvm的,對(duì)嗎?
          2011-07-08 14:11 | ryuume
          主站蜘蛛池模板: 城市| 澳门| 寻乌县| 烟台市| 陕西省| 邵东县| 紫云| 延长县| 通辽市| 常熟市| 靖西县| 宜丰县| 五莲县| 阳新县| 灌阳县| 江阴市| 岑巩县| 班玛县| 瑞昌市| 伊宁市| 万山特区| 梅河口市| 家居| 郧西县| 白水县| 尚志市| 资兴市| 尖扎县| 承德市| 杨浦区| 三明市| 佛冈县| 中方县| 成武县| 天全县| 平南县| 湘潭市| 汶上县| 全椒县| 松阳县| 西藏|