正确安装java 8和java 7

时间:2014-10-12 11:07:34

标签: java java-7 java-8

我的Windows 7计算机上安装了JDK 1.7,安装JDK 1.8 u20后,我遇到以下错误:

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一起使用?

10 个答案:

答案 0 :(得分:68)

问题是Java 8会安装很多你并不需要的东西:

  • \ windows \ system32 包含Java 8 java.exe,javaw.exe javaws。 exe文件 即可。您的路径可能在开头附近有 system32 ,因此这些路径默认情况下会运行。

  • 系统路径变量以 C:\ programdata \ Oracle \ Java \ javapath 开头。此文件夹包含 java.exe javaw.exe javaws.exe 作为JRE 8可执行文件的符号链接。

我删除了 system32 文件,并从系统路径中删除了 C:\ programdata \ Oracle \ Java \ javapath 。这似乎解决了这个问题。我现在可以通过将 JAVA_HOME PATH 指向相应的文件夹来切换版本。

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

答案 1 :(得分:12)

在“开始”菜单中,键入“regedit”以打开注册表编辑器

转到左侧注册表资源管理器/树状菜单中的“HKEY_LOCAL_MACHINE”

点击“HKEY_LOCAL_MACHINE”注册表

中的“软件”

单击“SOFTWARE”注册表

中的“JavaSoft”

单击“JavaSoft”注册表列表中的“Java Runtime Environment” 在这里你可以看到已安装java的不同版本

单击“Java Runtime Environment” - 在右侧,您将获得4-5行。请选择“CurrentVersion”并右键单击(选择修改选项) 将版本更改为“1.7”

现在魔术已经完成

答案 2 :(得分:3)

你不能吃蛋糕也不能吃。 :) 将PATH变量设置为JDK 1.8时,问题应该解决。您可以通过在命令提示符下使用set PATH手动设置PATH来运行JDK 1.7中的程序,也可以转到JDK 1.7目录并从那里运行程序。 但是你的PATH中只能有一个JDK。

答案 3 :(得分:3)

我遇到了同样的问题,然后意识到我的程序已用尽c:\Windows\SysWOW64,因此运行旧的java.exe。一旦我停止运行该目录(其中包含Java 7 exe),问题就会消失,因为它正确地跟踪路径java8

答案 4 :(得分:2)

如果您不习惯手动删除Windows中的任何文件,只需将JAVA_HOME路径放在Windows目录的前面。

在Windows 7中定义JAVA_HOME环境变量,并在Path变量的第一个位置的变量PATH中使用它。

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

答案 5 :(得分:1)

您可以定义一个java7别名,该别名将指向JDK7的bin文件夹,然后更改您的环境变量,使其指向JDK8。默认的JDK将是JDK8。

答案 6 :(得分:1)

感谢@Chris,对我而言,只需从C:\Windows\System32删除文件即可解决。

使用Sencha Command时遇到了这个问题,但当然它与Sencha无关。这是一个Java安装问题。

根据这篇文章,这个问题对于使用Java 1.6和1.7的人来说也很烦人: Registry Key '...' has value '1.7', but '1.6' is required. Java 1.7 is Installed and the Registry is Pointing to it

答案 7 :(得分:1)

就我而言,我卸载了其他版本的Java,保留了较新的版本

我在系统中安装了Java 7和Java 8.

我卸载了7并保留了8,在路径中,我已经拥有Java 8。

它对我有用:)

答案 8 :(得分:0)

在Windows 10上处理多个用于开发的JDK时,这个问题很烦人(我无法使用此处建议的OS系统路径更改)。

作为部分答案(因为这可能不是'正确'安装)我使用 Cygwin 来切换JAVA_HOME并使用不同的JDK运行Maven构建(1.7,1.8)安装(通过Oracle安装程序)。 因此,如果您安装了Cygwin(或者可以安装并使用它)并且愿意使用JAVA_HOME env变量(对于下面的示例中的Maven很有用),您可以这样做(但要注意链接答案中的“技巧”) 1并相应调整您的本地路径):

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

(mvn --version output)

  

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版本:   1.8.0_74 ,供应商:Oracle Corporation Java home:C:\ Progra~1 \ Java \ jdk1.8.0_74 \ jre默认语言环境:it_IT,platform   编码:Cp1252操作系统名称:“windows 10”,版本:“10.0”,arch:   “amd64”,家庭:“dos”

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

(mvn --version output)

  

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版本:   1.7.0_79 ,供应商:Oracle Corporation Java home:C:\ Work2 \ bin \ Java \ jdk1.7.0_79_64bit \ jre默认语言环境:it_IT,   平台编码:Cp1252操作系统名称:“windows 8.1”,版本:“6.3”,   arch:“amd64”,family:“windows”

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

答案 9 :(得分: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"