程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2SE >> J2SE綜合:淺談java程序發布之jre篇(1)

J2SE綜合:淺談java程序發布之jre篇(1)

編輯:J2SE

Java開發程序,發布時總要考慮的問題就是怎麼在使用者的機器上裝好JRE.要考慮的問題很多:使用者有沒有能力獨自安裝JRE,使用者已有的 JRE 和我們需要的版本是不是一致,會不會出現版本問題,等等。使用。NET要考慮的問題就少些。現在。NET CLR似乎已經很普及了,看好多D版的 Win XP都會自己安裝最新的。NET CLR,而且似乎它的安裝界面也比JRE友好些。徹底解決安裝JRE的問題的方案,就是讓我們的應用程序自己背著JRE!這樣,我們的程序就像傳統的Win32應用程序一樣,雙擊就可以執行,不用管所在的機器上是否有JRE,是什麼版本的JRE,無論怎樣,我有我自己的!要做到這一點,其實非常容易。
 
王森在他的《Java深度歷險》(強力推薦這本書,內容少而精)的第一章就解釋了JDK,JRE,JVM之間的關系。解釋了我們執行java.exe時發生的事情。其中提到,Java.exe依照一套邏輯來尋找可以用的JRE,首先查找自己所在的目錄下有沒有 JRE(據王森講這樣說不確切,我沒有JDK全部的源代碼,在此無從考證);其次查找自己的父目錄下有沒有JRE;最後才是查詢Windows的注冊表。
 
通常我們在安裝好了JRE的機器上的任何一個目錄下都可以執行java.exe.因為它在安裝時被復制到了Windows的system32目錄下,而後者無論如何都會在path環境變量中。這個java.exe最終必然會訪問注冊表來確定真正的JRE的所在地。若我們要求每一個應用程序都自帶JRE,必然不能走這條路。但,邏輯的第二條講,Java.exe會在它的父目錄下查找JRE,解決方案就在這一條中。
 
假設我們的應用程序打好了包,叫做 MyApp.jar,放在MyApp的目錄下。我們在MyApp目錄下,可以執行java ?jar MyApp.jar來運行我們的程序。我們安裝的是 JRE 1.5,在C:\Program Files\Java\jre1.5.0下。現在,我們只需要簡單的將jre1.5.0目錄搬到MyApp目錄下,順便改個容易寫的名字比如叫jre.現在,我們的應用程序就象這樣:
 
MyApp
 
MyApp.jar
 
Jre
 
Jre1.5.0目錄下的全部內容
 
Java.exe 就在jre目錄下的bin目錄中。根據第二條邏輯,java.exe會在它的父目錄中查找jre,實驗證實,它會查找lib目錄,而lib就在jre目錄下。因此,這樣java.exe就會確定jre的所在然後正常執行Java程序,不會去管我們是否安裝了JRE,注冊表中是否有注冊項這些雜事了。
 
試一下,在命令行下進入MyApp的目錄下,假設它在C盤,將path指向MyApp下的JRE:
 
set path=c:\MyApp\jre\bin
 
然後運行:
 
Java ?verbose ?jar MyApp.jar
 
加上verbose參數以確定我們確實用了這一套被搬出了家的JRE.
 
程序可以運行,並且在命令行輸出的前幾行,可以看到:
 
[Opened C:\MyApp\jre\lib\rt.jar]
 
[Opened C:\MyApp\jre\lib\JSse.jar]
 
[Opened C:\MyApp\jre\lib\jce.jar]
 
[Opened C:\MyApp\jre\lib\charsets.jar]
 
因此程序讀取的確實是它的私有的JRE.
 
至此,我們似乎完成了任務。但是現在我們的私有JRE仍不完美,缺點是太大。JRE 1.5有接近70MB,作為我們的私有的JRE,好多內容都是可以拋棄的。Jre目錄下的license都可以不要,bin下的執行文件只需要保留java.exe或者javaw.exe,lib下只要保留rt,JSse, jce,charsets幾個庫就可以了。除了i386和zi兩個子目錄外,其余的子目錄都可以不要。Zi下只需要保留自己地區的子目錄和其下的一些文件就可以。Lib下除了庫之外的屬性文件等等都要保留。這樣清理一番,JRE仍然有接近50MB.還可以繼續清理幾個庫文件裡面不需要的內容,這需要仔細的整理,會很費功夫。最好能寫出一個自動工具幫助我們整理它們。從Sun公司上下到的JMF裡面附帶的用Java寫的媒體播放器就自帶了JRE,只有幾個 MB.
 
清理過後需要運行幾遍我們的應用程序,以確保我們的JRE不缺少東西。

本文來自編程入門網:http://www.bianceng.cn/Programming/Java/201107/27907.htm

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved