正确安装Java8和Java7

正确安装Java8和Java7,java,java-7,java-8,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 S

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

你不能既有蛋糕又吃蛋糕。:) 当您将PATH变量设置为JDK1.8时,问题应该得到解决。您可以在JDK1.7中运行程序,方法是使用命令提示符中的SETPATH手动设置PATH,也可以转到JDK1.7目录并从那里运行程序。
但是您的路径中只能有一个JDK。

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

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

的路径。问题是java8安装了很多您并不真正需要的东西:

  • \windows\system32包含Java 8Java.exe、javaw.exejavaws.exe。路径的开头可能有system32,因此默认情况下会运行这些路径

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

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

甲骨文似乎决心让多个版本难以运行。这在JRE中是可以理解的,但在JDK中却是疯狂的,因为开发人员几乎总是需要多个版本的Java

编辑:我发现这个批处理脚本对于切换JDK很有用。用法:jdk.bat6 | 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
在开始菜单中键入“regedit”打开注册表编辑器

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

单击“HKEY_本地_机器”注册表中的“软件”

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

在“JavaSoft”注册表列表中单击“Java运行时环境” 在这里,您可以看到已安装java的不同版本

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


现在魔法已经完成了

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

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

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

谢谢@Chris,对我来说,从
C:\Windows\System32
删除文件就解决了这个问题

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

显然,这个问题对使用Java 1.6和1.7的人来说也很烦人,根据这篇文章:

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

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

(mvn——版本输出)

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

(mvn——版本输出)

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


在我的例子中,我卸载了Java的其他版本,保留了更新的版本

我在系统中有Java7和Java8

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


它对我起了作用:)

根据您自己的值编辑此文本,另存为“.reg”,执行,享受:)


呸!这对我来说是个好办法!我做了其他一切,但它仍然抛出问题。从SysWOW64文件夹中删除它们是我需要的最后一点。我同意。Oracle不便于使用多个JDK。我从路径中删除了C:\programdata\Oracle\Java\javapath,以允许我使用普通的旧环境变量来控制jdk的使用。这个答案解决了我在过去半个小时所面临的问题!谢谢,我正在运行Java1.6,但我有一个
export JAVA_HOME=/cygdrive/c/Progra~1/Java/jdk1.8.0_74
export JAVA_HOME=/cygdrive/c/Work2/bin/Java/jdk1.7.0_79_64bit/
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.8.0_74]
"JavaHome"="C:\\Program Files\\Java\\jre8"