java - 正确安装 java 8 和 java 7

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

最佳答案

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

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

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

我已删除 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

关于java - 正确安装 java 8 和 java 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26324486/

相关文章:

java - Long 到 XMLGregorianCalendar 并返回到 Long

java - 满足字符串选择条件,不调用类

java - JAXB - TreeGrid 解决 XmlElement 冲突

Java : How to return intermediate results from a Thread

windows - Windows 上的 Java 8 64 位,带有符合 FIPS 140 的 NSS

java - 如何查找整个 csv 文件中每一列的最小值和最大值

java - 反转 AutoCompleteTextView 建议顺序

ssl - "peer not authenticated"与使用 Letsencrypt SSL 保护的网站交谈时(在 JDK7 上)

java - 执行 Observables 映射

java - 在Spring Boot应用程序(Java 8)的 Controller 中设置日期值