就我所知,目前把Java程序編譯成本機(jī)可執(zhí)行程序的方法有兩種,一種是GCJ,免費(fèi)的,一種是Excelsior JET,商業(yè)的。我已經(jīng)很久沒(méi)有碰過(guò)GCJ了,因?yàn)楫?dāng)初用起來(lái)實(shí)在是非常麻煩,現(xiàn)在的版本如何,我不太清楚。我自己使用的是Excelsior JET,版本為3.7。有一點(diǎn)要注意的的是,Excelsior JET的后續(xù)版本好像已經(jīng)不支持這個(gè)功能了,3.7是我所知的最后一個(gè)版本,能支持當(dāng)前所有的Win32平臺(tái)和早期的Linux(當(dāng)前比較流行的Ubuntu不支持,因?yàn)閮?nèi)核版本過(guò)高,不過(guò)企業(yè)版Redhat沒(méi)有問(wèn)題)。不過(guò)我是很久以前從0day當(dāng)下來(lái)的,由于0day倉(cāng)儲(chǔ)只保留一年,故現(xiàn)在已經(jīng)找不到了,我自己的機(jī)器上也沒(méi)有安裝包了(有一次大意之下,把整個(gè)Download目錄全給刪掉了,事后悔之晚矣)。
Excelsior JET無(wú)非就是用自己的Runtime來(lái)代替JRE,只是比JRE更加靈活,根據(jù)Java程序具體的依賴(lài)來(lái)生成對(duì)應(yīng)的Runtime。其實(shí)這個(gè)Runtime也挺大的,通常10M左右,不過(guò)比起JRE,那要小很多了。SWT Extension上的那個(gè)例子只有6M,是因?yàn)槲矣?/span>ASPack把所有的DLL文件全部壓縮過(guò)了,體積小了一半。
就我的感覺(jué),Excelsior JET比GCJ更加靈活,也更好用,畢竟是商業(yè)版的東西,它的網(wǎng)站上曾經(jīng)有例子將Eclipse 3.0編譯成本機(jī)程序,不過(guò)我當(dāng)初照著例子試了一遍,沒(méi)有成功。Excelsior JET的編譯過(guò)程極為耗時(shí),我上大學(xué)的時(shí)候,當(dāng)時(shí)機(jī)器只有128M內(nèi)存,編譯了一天JRE也沒(méi)有完成,后來(lái)找同學(xué)借了根256的內(nèi)存,這才得以完成。
把JAVA代碼編譯成本機(jī)程序的弊端也是有的,那意味著你將無(wú)法在線(xiàn)升級(jí),GCJ也許可以,但是Excelsior JET是絕對(duì)不行的,這是因?yàn)樗詈笠徊揭獙?duì)所有DLL進(jìn)行鏈接,如果更換了DLL文件,它會(huì)檢測(cè)出來(lái)并報(bào)錯(cuò)。
各位看官如果哪位有興趣,可以自行在網(wǎng)上查找Excelsior JET3.7或其他版本。由于安裝包我自己也沒(méi)有,故無(wú)法提供下載,見(jiàn)諒。