2014-10-12 99 views
33

我有JDK 1.7在我的Windows 7機器和安裝JDK 1.8 U20後,我有以下錯誤安裝:正確使用Java一起安裝Java 8 7

C:\>java -version 
Error: Registry key 'Software\JavaSoft\Java Runtime Environment'\CurrentVersion' 
has value '1.8', but '1.7' is required. 
Error: could not find java.dll 
Error: Could not find Java SE Runtime Environment. 

PATH變量指向舊版本(即1.7)。

這裏有什麼問題,以及我如何使用java 8和java 7一起使用?

回答

65

的問題是Java 8安裝了很多的東西,你並不真的需要:

  • \ Windows \ System32下包含Java 8 的java.exe,javaw.exe的javaws.exe。您的路徑可能在開頭附近有system32,因此這些路徑往往默認運行。

  • 系統路徑變量以開頭C:\ programdata \ Oracle \ Java \ javapath。此文件夾包含java.exe,javaw.exejavaws.exe作爲符號連接到JRE 8可執行文件。

我已經刪除了SYSTEM32文件,並刪除C:\ programdata \ ORACLE \的Java \ javapath從系統路徑。這似乎解決了這個問題。我現在可以通過將JAVA_HOMEPATH指向相應的文件夾來切換版本。

Oracle似乎決定讓它難以運行多個版本。 JRE是可以理解的,但對於JDK來說這很瘋狂,因爲開發人員幾乎總是需要多個版本的Java。

編輯:我覺得這個批處理腳本對於切換JDK很有用。用法:jdk.bat 6 | 7 | 8。您可能必須編輯Java的安裝位置。

@echo off 
if "%1"=="" goto report 
set _version=%1 
shift 
if "%1"=="DBG" shift & echo on 
set _command=%1 %2 %3 %4 %5 

set _jdkdir= 
set _jdkver= 
for /D %%f in ("C:\Program Files\java\"jdk1.%_version%.*) do call :found "%%f" 
if "%_jdkdir%"=="" goto notfound 

set java_home=C:\Program Files\java\%_jdkdir% 
call :javapath 
path %new_path% 
goto :report 

:javapath 
    setlocal enabledelayedexpansion 
    set _jdirs= 
    for /D %%j in ("C:\Program Files\java\*") do set _jdirs=!_jdirs!#%%~fj\bin 
    set _jdirs=%_jdirs%# 

    set _javabin=%java_home%\bin 
    set _fpath="%PATH:;=" "%" 
    call :checkpath %_fpath% 
    endlocal & set new_path=%_javabin% 
goto :eof 

:checkpath 
    if _%1==_ goto :eof 
    echo %_jdirs% | find /i "#%~1#" 1>nul 2>&1 
    set _err=%errorlevel% 
    if not %_err%==0 set _javabin=%_javabin%;%~1 
    if %_err%==0 echo Removed %~1 from path 
    shift 
    goto :checkpath 

:report 
javac -version 
%_command% 
goto :eof 

:notfound 
echo No JDK matching [C:\Program Files\java\jdk1.%_version%.*] found. 
goto :eof 

:found 
set _jdkdir=%~n1%~x1 
for /F "tokens=2,3 delims=." %%a in ("%_jdkdir%") do set _jdkver=1.%%a.%%b 
goto :eof 
+3

我同意。 Oracle使用多個JDK並不容易。我從我的路徑中刪除了C:\ programdata \ Oracle \ Java \ javapath,以允許我使用普通的舊環境變量來控制jdk的使用。 – 2015-01-21 18:01:43

+1

同意。這個答案解決了我最近半小時面臨的問題!謝謝 – 2015-07-28 07:56:16

+0

我正在運行java 1.6,但我有1.7和1.8安裝在Windows 7中,並修復它。謝謝! – 2015-10-01 16:17:43

3

你不能吃你的蛋糕,也吃不了它。 :) 當您將PATH變量設置爲JDK 1.8時,問題應該解決。您可以通過使用命令提示符中的set PATH手動設置PATH來運行JDK 1.7中的程序,也可以轉到JDK 1.7目錄並從那裏運行程序。 但是PATH中只能有一個JDK。

+0

更新環境變量中的路徑變量爲jdk 1.8已解決,顯示上述錯誤。 – srinivas 2015-08-06 06:44:28

1

您可以定義一個java7別名,它將導致JDK7的bin文件夾,然後更改您的環境變量以指向JDK8。那麼默認的JDK將會是JDK8。

3

我有同樣的問題,然後意識到我的程序用完了c:\Windows\SysWOW64,因此運行舊的java.exe。一旦我停止運行該目錄(其中包含Java 7 exe),問題就消失了,因爲它正確地遵循路徑java8

+0

Bah!那爲我做了詭計!我做了所有其他事情,但仍然在拋出問題。從SysWOW64文件夾中刪除它們是我需要的最後一個位。 – 2015-01-05 16:31:14

11

在開始菜單中輸入「regedit」打開註冊表編輯器

轉到左側註冊表資源管理器/樹形菜單中的「HKEY_LOCAL_MACHINE」

點擊「軟件」中的「HKEY_LOCAL_MACHINE」 登記冊的 「軟件」 內

點擊 「JavaSoft的」 登記處

點擊 「Java運行時環境」 的「JavaSo內ft「註冊表列表 在這裏您可以看到已安裝java的不同版本

單擊」Java運行時環境「 - 在右側,您將獲得4-5行。請選擇「CURRENTVERSION」並右鍵單擊(選擇修改選項) 更改版本爲「1.7」

現在的魔術已經完成

2

如果你不舒服手動刪除Windows中的任何文件,只要把你的Windows dirs前面的JAVA_HOME路徑。

在Windows 7中定義JAVA_HOME環境變量,並在Path變量第一個位置的變量PATH中使用它。

JAVA_HOME -> D:\dev\Java\jdk1.8.0_45 
Path -> %JAVA_HOME%\bin;%SystemRoot%\system32; 
+0

謝謝,這個改變解決了我的問題 – fnicollet 2015-09-16 10:10:19

0

這個問題很煩人(我做不到按照此處的建議使用OS系統路徑更改)。

作爲了部分答案(因爲這可能並非意爲「正確」安裝的)我使用Cygwin的切換JAVA_HOME和運行Maven做得相當精細建立安裝不同的JDK(1.7,1.8)(通過Oracle安裝程序)。因此,如果你已經安裝了Cygwin(或者可以安裝並使用它)並且願意使用JAVA_HOME env變量(在下面這個例子中對Maven很有用),你可以這樣做(但是要注意答案中的'技巧'鏈接1並相應地調整你的本地路徑):

export JAVA_HOME=/cygdrive/c/Progra~1/Java/jdk1.8.0_74 

(MVN版本輸出)

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47+01:00) Maven home: C:\Work2\bin\apache-maven-3.3.9-bin\apache-maven-3.3.9 Java version: 1.8.0_74, vendor: Oracle Corporation Java home: C:\Progra~1\Java\jdk1.8.0_74\jre Default locale: it_IT, platform encoding: Cp1252 OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"

export JAVA_HOME=/cygdrive/c/Work2/bin/Java/jdk1.7.0_79_64bit/ 

(MVN版本輸出)

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47+01:00) Maven home: C:\Work2\bin\apache-maven-3.3.9-bin\apache-maven-3.3.9 Java version: 1.7.0_79, vendor: Oracle Corporation Java home: C:\Work2\bin\Java\jdk1.7.0_79_64bit\jre Default locale: it_IT, platform encoding: Cp1252 OS name: "windows 8.1", version: "6.3", arch: "amd64", family: "windows"

https://stackoverflow.com/questions/14567191/export-java-home-with-spaces-in-cygwin

1

就我而言,我卸載其他Java版本保持較新版本

我的Java 7和Java 8系統。

我卸載7和保持8,在路徑,我已經有Java的8

它爲我:)

0

編輯這個文本在基地自己的價值觀,另存爲「的.reg」 ,執行,享受:)

Windows Registry Editor Version 5.00 
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.8.0_74] 
"JavaHome"="C:\\Program Files\\Java\\jre8"