JDK版本不兼容問題之:一臺機器安裝多個版本的JDK

我的機器上最開始安裝的是jdk1.6,後來因爲工作需要又安裝了jdk1.4。但是,環境變量我並未更改,還是指向jdk1.6的路徑的。

可是,在cmd窗口輸入 java -version 卻得到是1.4.2。

查詢環境變量:
1.我的電腦->屬性->高級->環境變量
2. 系統環境變量(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment)
  當前用戶環境變量(HKEY_CURRENT_USER\Environment)


2個設置完全是一樣,都是指向1.6。

爲了搞清楚問題的原因,通過查詢相關的資料,原來是這樣的:

JDK在安裝的過程當中將在註冊表會生成如下3個項目:
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Plug-in
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment

同時,JDK安裝程序將會把java.exe,javaw.exe,javareg.exe這3個可執行文件拷貝到%SystemRoot%\system32目錄下,由於%SystemRoot%\system32被操作系統缺省的設置爲最高優先權的PATH搜索路徑,因此可保證用戶在命令行任何目錄下可運行java.exe來啓動JVM。

查詢HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment得知CurrentVersion=1.4。
於是我手動將它修改爲1.6後,然後運行java -version得到以下結果:

Registry key 'Software\JavaSoft\Java Runtime Environment\
has value '1.6', but '1.4' is required.
Error: could not find java.dll
Error: could not find Java 2 Runtime Environment.


所以,不能簡單的修改註冊表的CurrentVersion值來達到更改運行的JRE。若人爲的修改CurrentVersion,會使得不同版本的java.exe加載與己版本不符的java.dll及 jvm.dll,將引起難以預料的後果!

一般地,當在系統中裝了兩套或多套版本的Java2 SDK,後面安裝的Java2 SDK會將自己帶的java.exe和javaw.exe拷貝到%SystemRoot%\system32目錄下,從而覆蓋先前版本的java.exe和 javaw.exe,並且在註冊表中改寫CurrentVersion爲後安裝的版本。所以建議在安裝Java2 SDK前,先卸載以前安裝的版本。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章