【问题标题】:Properly installing java 8 along with java 7正确安装 java 8 和 java 7
【发布时间】:2014-12-07 02:28:06
【问题描述】:

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

【问题讨论】:

    标签: java java-7 java-8


    【解决方案1】:

    问题在于 Java 8 安装了很多你并不真正需要的东西:

    • \windows\system32 包含 Java 8 java.exe、javaw.exejavaws。 exe。您的路径可能在开头附近有 system32,因此它们往往会默认运行。

    • 系统路径变量以 C:\programdata\Oracle\Java\javapath 开头。此文件夹包含 java.exejavaw.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
    

    【讨论】:

    • 我同意。 Oracle 无法轻松使用多个 JDK。我从路径中删除了 C:\programdata\Oracle\Java\javapath 以允许我使用普通的旧环境变量来控制 jdk 的使用。
    • 我正在运行 java 1.6,但我在 windows 7 中安装了 1.7 和 1.8,这修复了它。谢谢!
    • 这个小的 DOS 脚本运行良好。我将其保存为switch-jdk.bat' in the %USERPROFILE%\bin. I was able to run it with switch-jdk 7',然后保存为switch-jdk 8' and then switch-jdk 9'。当然,首先将 %USERPROFILE%\bin 添加到您的 PATH 环境中!有没有人写过与此等效的 BASH shell?
    【解决方案2】:

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

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

    点击“HKEY_LOCAL_MACHINE”注册表中的“软件”

    点击“软件”注册表中的“JavaSoft”

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

    单击“Java 运行时环境”- 在右侧,您将获得 4-5 行。请选择“当前版本”并右键单击(选择修改选项) 将版本更改为“1.7”

    现在魔法已经完成

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 将环境变量中的Path变量更新为jdk 1.8已解决,出现上述错误。
      【解决方案4】:

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

      【讨论】:

      • 呸!这对我有用!我做了其他所有事情,但它仍然抛出问题。从 SysWOW64 文件夹中删除它们是我需要的最后一点。
      【解决方案5】:

      如果您不习惯手动删除 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;
      

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          我在使用煎茶命令时遇到了这个问题,当然这与煎茶无关。这是 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

          【讨论】:

            【解决方案8】:

            在我的情况下,我卸载了其他版本的 Java,保留了较新的版本

            我的系统中有 Java 7 和 Java 8。

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

            它对我有用:)

            【讨论】:

              【解决方案9】:

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

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

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

              (mvn --version 输出)

              Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47+01:00) Maven 主页: C:\Work2\bin\apache-maven-3.3.9-bin\apache-maven-3.3.9 Java版本: 1.8.0_74,供应商:Oracle Corporation Java 主页:C:\Progra~1\Java\jdk1.8.0_74\jre 默认语言环境:it_IT,平台 编码:Cp1252 操作系统名称:“windows 10”,版本:“10.0”,arch: “amd64”,家庭:“dos”

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

              (mvn --version 输出)

              Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47+01:00) Maven 主页: C:\Work2\bin\apache-maven-3.3.9-bin\apache-maven-3.3.9 Java版本: 1.7.0_79,供应商:Oracle Corporation Java 主页:C:\Work2\bin\Java\jdk1.7.0_79_64bit\jre 默认语言环境:it_IT, 平台编码:Cp1252 操作系统名称:“windows 8.1”,版本:“6.3”, 拱门:“amd64”,家庭:“windows”

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

              【讨论】:

                【解决方案10】:

                根据您自己的值编辑此文本,另存为“.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"
                

                【讨论】:

                  猜你喜欢
                  • 2017-12-08
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-06-19
                  • 1970-01-01
                  • 2015-03-06
                  • 2014-04-16
                  • 2012-09-18
                  • 1970-01-01
                  相关资源
                  最近更新 更多