web-dev-qa-db-ja.com

Java 8とともにJava 7

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?

34
bachr

問題は、Java 8は本当に必要ないものをたくさんインストールすることです:

  • \ windows\system32 contains Java 8 Java.exe、javaw.exeおよびjavaws.exe。パスにはおそらくsystem32が先頭近くにあります、したがって、これらはデフォルトで実行される傾向があります。

  • システムパス変数はC:\ programdata\Oracle\Java\javapathで始まります。このフォルダーには、JRE 8実行可能ファイルへのシンボリックリンクとしてJava.exejavaw.exe、およびjavaws.exeが含まれています。

system32ファイルを削除し、システムパスからC:\ programdata\Oracle\Java\javapathを削除しました。これで問題が解決したようです。 Java_HOMEおよび[〜#〜] path [〜#〜]を適切なフォルダーにポイントすることで、バージョンを切り替えることができます。

Oracleは、複数のバージョンを実行するのを難しくすることを決意しているようです。これはJREでは理解できますが、開発者はほとんどの場合Javaの複数のバージョンを必要とするため、JDKには夢中です。

編集:このバッチスクリプトは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
68
Chris

[スタート]メニューに「regedit」と入力してレジストリエディターを開きます。

左側のレジストリエクスプローラー/ツリーメニューの[HKEY_LOCAL_MACHINE]に移動します

「HKEY_LOCAL_MACHINE」レジストリ内の「ソフトウェア」をクリックします

「ソフトウェア」レジストリ内の「JavaSoft」をクリックします

レジストリの「JavaSoft」リスト内の「Java Runtime Environment」をクリックすると、インストールされているJavaの異なるバージョンが表示されます

[Java Runtime Environment]をクリックします。右側に4〜5行表示されます。 「CurrentVersion」を選択し、右クリック(変更オプションを選択)バージョンを「1.7」に変更してください

これで魔法が完成しました

12
satender

ケーキを持って食べることもできません。 :) PATH変数をJDK 1.8に設定すると、問題は解決するはずです。 JDK 1.7でプログラムを実行するには、コマンドプロンプトからset PATHを使用してPATHを手動で設定するか、JDK 1.7ディレクトリに移動してそこからプログラムを実行します。ただし、PATHに含めることができるJDKは1つだけです。

3
RehanZahoor

私は同じ問題を抱えていて、私のプログラムがc:\Windows\SysWOW64を使い果たしているため、古いJava.exeを実行していることに気付きました。そのディレクトリ(Java 7 exeを含む)の実行を停止すると、Java8へのパスを適切にたどったため、問題はなくなりました。

3
Mycroft_IV

Windowsのファイルを手動で削除することに不安がある場合は、Windowsのディレクトリの前にJava_HOMEパスを置くだけです。

Windows 7でJava_HOME環境変数を定義し、Path変数の最初の位置の変数PATHで使用します。

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

@Chrisに感謝します。私にとっては、C:\Windows\System32

Sencha Commandを使用するとこの問題が発生しましたが、もちろんSenchaとは何の関係もありません。これはJavaインストールの問題です。

どうやら、この問題はJava 1.6と1.7の人にとっては本当に迷惑でした: レジストリキー '...'の値は '1.7'ですが、 '1.6'はJava 1.7がインストールされ、レジストリがそれを指している

1
Alex MM

JDK7のbinフォルダーにつながるJava7エイリアスを定義してから、JDK8を指すように環境変数を変更できます。デフォルトのJDKはJDK8です。

1
Dici

私の場合、Javaの新しいバージョンを保持する他のバージョンをアンインストールしました

システムにJava 7およびJava 8がありました。

私は7をアンインストールし、パスに8を保持しました。すでにJava 8。

それは私のために働いた:)

1
Punith Kumar

このテキストを独自の値に基づいて編集し、「。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"
0
tito76

この問題は、Windows 10で複数のJDK 開発中を処理するときに厄介です(ここで提案されている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 --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.9Javaバージョン:1.8.0_74、ベンダー:Oracle Corporation Java home:C:\ Progra〜1\Java\jdk1 .8.0_74\jreデフォルトロケール:it_IT、プラットフォームエンコーディング:Cp1252 OS名: "windows 10"、バージョン: "10.0"、Arch: "AMD64"、family: "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.9Javaバージョン:1.7.0_79、ベンダー:Oracle Corporation Java home:C:\ Work2\bin\Java\jdk1 .7.0_79_64bit\jreデフォルトロケール:it_IT、プラットフォームエンコーディング:Cp1252 OS名: "windows 8.1"、バージョン: "6.3"、Arch: "AMD64"、family: "windows"

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

0
Diego1974