레지스트리 키 '…'의 값은 '1.7'이지만 '1.6'이 필요합니다. Java 1.7이 설치되고 레지스트리가이를 가리킴


95

제 개발 팀은 최근에 서버에 대한 전체 액세스 권한이없는 원격 개발 환경으로 이동했습니다. 변경 전에 JRE 7과 함께 Java 1.7 x64에서 잘 실행되는 JAR이있었습니다. 새 서버로 이동했을 때 JAR이 제대로 실행되고 있었지만 서버 관리자 중 한 명이 Java를 이전 버전으로 "업데이트"했습니다. 우리가 사용하고 있던 버전을 제거했습니다. 이유는 묻지 마세요. Java 1.7을 다시 설치하고 JRE와 함께 1.6을 제거했습니다.

런타임시 다음 문제가 발생하며 빌드 오류가 없습니다.

Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'
has value '1.7', but '1.6' is required.
Error: could not find java.dll
Error: could not find Java SE Runtime Environment.

문제없이 랩톱에서 동일한 JAR을 실행했습니다. 서버와 랩톱 모두 각각의 % HOME % 변수 및 시스템 PATH에 JDK 1.7 및 JRE 7이 있습니다. JRE 6을 다시 설치하고 나중에 동일한 결과로 시스템 환경 PATH 변수에 배치했습니다.

또한 레지스트리를 다시 1.6으로 변경했으며 결과는 다음과 같습니다. 여러 Java가 설치되어있는 것 같습니다 (원래 문제로 돌아 감).

Exception in thread "main" java.lang.UnsupportedClassVersionError: ... :
Unsupported major.minor version 51.0

다양한 포럼을 살펴 보았지만 내 문제가 정확히없는 것 같기 때문에 여러분 모두가 가진 통찰력에 감사드립니다. 또한 이것은 우리가 사용하는 다른 서버에서도 발생했습니다. 감사!

업데이트 : JAR을 1.6 또는 1.7로 다시 컴파일하고 JDK와 일치하는 것은 운이 없습니다. 또한 왜 새로운 버전의 Java가 이전의 컴파일 된 버전을 깨뜨릴까요?

답변:


159

이것은 자바 자체를 혼란스럽게 할 때 발생합니다. JRE 7을 찾은 Java 6 VM을 실행하려고합니다. 명령 줄을 입력 java하거나 java -version잘못 구성된 환경에서 입력하더라도이 문제가 표시 될 수 있습니다. JAR의 코드가 Windows 레지스트리에서 해당 항목을 찾는 경우를 제외하고는 JAR이 문제가 아닙니다 (아마도 귀하의 경우가 아님).

제 경우 에는 폴더 에 java.exe, javaw.exejavaws.exeJava 6이 있습니다 Windows/System32(어떻게 있어야하는지 모르겠습니다). 나머지 JDK 및 JRE는 C:\Java\jdk_1.7.0\bin. 이런!


62
동일한 문제가 발생했지만 Java 8을 제거한 후 동일한 문제가 발생했습니다. Windows / System32에있는 java.exe, javaw.exe 및 javaws.exe를 삭제하여 문제를 해결했습니다. 내가 어떻게 거기에 왔는지 모르겠지만 정말 이상한 사촌.
C Deepak

2
알려 주셔서 감사합니다. 제 경우에는 JDK 1.7 대 JDK 1.8입니다.
daoway

7
x86 사람들을 위해 !! 나는 원래 몇 달 전에 1.8 jre를 설치했고 1.8 sdk를 원했습니다. java.exe, javaw.exejavaws.exe은 아래에 저장됩니다 Windows/SysWOW64. 또한 어떤 이유로 나는 1.8가 설치된 SDK를 설치할 때 java.exe, javaw.exe그리고 javaws.exe아래에 C:/ProgramData/Oracle/Java/javapath. 이유는 모르겠지만 삭제 한 java -version후에도 작동합니다.
Luminous

1
System32는 저에게 핵심이었습니다. javapath에 올바른 버전이 있고 환경 변수가 제대로 설정되어 있는지 확인했습니다. System32 거래를 수정하기 전까지는 아무것도 작동하지 않았습니다. 모든 것이 같은 페이지에 있어야합니다.
BK

2
indows / System32에있는 java.exe, javaw.exe 및 javaws.exe를 삭제하면 문제가 해결됩니다. 감사합니다 @C 디팍
타히르 질 라니

59

Java 7을 이미 실행중인 시스템에 Java 8 (jdk 및 jre)을 설치할 때 비슷한 오류가 발생했습니다.

오류 : 레지스트리 키 'Software \ JavaSoft \ Java Runtime

Environment '\ CurrentVersion'의 값은 '1.8'이지만 '1.7'이 필요합니다.

오류 : java.dll을 찾을 수 없습니다. 오류 : Java SE 런타임 환경을 찾을 수 없습니다.

내 환경이 올바르게 설정되었지만 (Path 및 java_home이 올바르게 정의 됨) 문제는 8 개 이전 Java 설치 프로그램이 작동하는 방식에서 발생합니다. 즉, 세 개의 실행 파일 (java.exe, javaw.exe 및 javaws.exe)을 복사하는 데 사용되었습니다 )를 Windows 시스템 디렉토리에 추가합니다. 새로운 사전 8 설치로 덮어 쓰지 않는 한 유지됩니다.

그러나 Java 8 설치 프로그램은 대신 새 디렉토리 인 C : \ ProgramData \ Oracle \ Java \ javapath에 실제 JRE 8 위치를 가리키는 심볼릭 링크를 만듭니다.

이것은 실제로 이전 7 개의 exe를 실행하지만 새로운 8 개의 DLL을 사용한다는 것을 의미합니다.

따라서 해결책은 위와 같이 Windows 시스템 디렉토리에서 3 개의 Java exe를 삭제하는 것입니다.

64 비트 Windows에서 32 비트 Java를 실행하는 경우 exe는 Windows \ SysWOW64에 있고 그렇지 않으면 Windows \ System32에 있습니다.


이것은 작동하는 해결책이며 동일한 문제에 직면했으며 이것이 해결되었습니다.
Sagar D

이것은 적어도 나에게는 훨씬 더 나은 솔루션입니다. 감사.
cbmeeks

28

windows / system32에서 java 파일을 삭제했으며 java 1.8 파일에 대한 3 개의 심볼릭 링크가 있었기 때문에 PATH 변수에서 c : \ ProgramData \ Oracle \ Java \ javapath도 제거했습니다.

% JAVA_HOME % 변수에 JDK 1.7이 있고 PATH에 java1.7 / bin이 있습니다.

PS1 : 내 문제는 Java 1.7과 Java 1.8 사이에있었습니다.

PS2 : 포인트가 충분하지 않기 때문에 Victor의 답변에 댓글로 추가 할 수 없습니다.


3
문제 : sencha cmd를 사용하는 동안 1.7 및 1.8 문제에 직면했습니다. 솔루션 : % PATH % 환경 변수에 jdk1.7 / bin 경로를 추가하고 c : / windows / system32 디렉토리에서 java 파일 (java.exe, javaw.exe, javaws.exe)을 제거했습니다. 문제가 해결되었습니다 :)
saurabh

3
전체 f *** 문제는 X : \ Windows \ SysWOW64 및 X : \ Windows \ System32 java * .exe 파일
이었습니다

17

시작 메뉴에서 "regedit"를 입력하여 레지스트리 편집기를 엽니 다.

왼쪽 레지스트리 탐색기 / 트리 메뉴에서 "HKEY_LOCAL_MACHINE"으로 이동합니다.

"HKEY_LOCAL_MACHINE"레지스트리에서 "SOFTWARE"를 클릭하십시오.

"SOFTWARE"레지스트리에서 "JavaSoft"를 클릭하십시오.

"JavaSoft"레지스트리 목록에서 "Java Runtime Environment"를 클릭하면 설치된 Java의 여러 버전을 볼 수 있습니다.

"Java Runtime Environment"를 클릭하면 오른쪽에 4-5 개의 행이 표시됩니다. "CurrentVersion"을 선택하고 오른쪽 클릭 (수정 옵션 선택) 버전을 "1.7"로 변경하십시오.

이제 마법이 완성되었습니다


4

아직이 스레드를 팔로우중인 사람이 있는지는 모르겠지만 최근에 ActiveMQ 5.10을 Windows 서비스로 시작하려고 할 때이 문제가 발생했습니다.

JAVA_HOME 경로가 설정되지 않았습니다. Java 6과 Java 7이 설치되어 있지만 기본 버전은 v7입니다. (즉, 명령 창을 열고 "java -version"을 입력 한 경우).

여기에 단서가 있습니다. "java -version"이 "Java HotSpot (TM) 64 비트 서버 VM (빌드 23.1-b03, 혼합 모드)"을 반환했지만 Win32 서비스를 설치했습니다 ...

64 비트 컴퓨터에서 Win32 래퍼를 사용하면 어떻게 든 다른 버전의 Java를 사용하기로 결정합니다.

그래서 내 수정은 32 비트 버전의 래퍼를 제거하고 64 비트 버전을 설치하는 것이 었습니다. 내 컴퓨터에 대한 혐오; 그냥 습관 같네요 ...하지만 운 좋게도 결국 문제를 해결했습니다 ...


1
32 비트 및 64 비트 버전의 Java가 모두 설치되어 있고 자동 (또는 제 경우 강제 회사) 업데이트가 그중 하나만 업데이트하는 경우이 문제가 발생할 수 있습니다. 모든 Java 인스턴스를 제거하고 32 비트와 64 비트를 다시 설치하면 해결됩니다.
DannyMeister 2014

0

내 Win7의 경우

Paradox는 System32 폴더에서 java.exe 및 javaw.exe였습니다. 해당 폴더를 열면 볼 수 없지만 시작 메뉴의 검색을 사용하여 해당 파일에 대한 링크를 얻고 제거했습니다. 다음 searsh는 JAVA_HOME의 파일에 대한 링크를 제공했습니다.

매직)


-1

올바른 디렉토리로 변경하십시오. java.exe즉 필요한 JDK 버전으로 이동 하십시오.java.exe

cd C:/Program Files/Java/jdk1.7.0_25/bin

java.exe이 디렉토리에서 실행하면 레지스트리 및 $ PATH 설정보다 우선합니다.

java -jar C:/installed/selenium-server-standalone-2.53.0.jar 


-3

항아리는 1.6 준수하도록 컴파일되었습니다 . 이것이이 오류가 발생하는 이유입니다. 두 가지 해결 방법 :
1) Java 1.6 사용

또는

2) 환경에 맞게 jar를 다시 컴파일하십시오. 1.7


나는 실제로 두 가지를 모두 수행했지만 약간의 백업을 제공합니다. JAR은 실제로 C # GUI를 통해 실행됩니다. JAR 자체는 GUI가 아닌 명령 줄을 통해 실행됩니다. 내가 실행중인 JAR (GUI 실행과 관련된) 내의 다른 JAR 일 수 있다고 생각합니다. 그렇다면 이것이 사실일까요? 중첩 된 JAR 파일이 1.6으로 컴파일 되었습니까?
Bryan A

이것은 믿을 수없는 소리입니다. Java 버전은 하위 버전과 호환됩니다. JDK 6 용으로 컴파일 된 코드는 재 컴파일이나 수정없이 Java 7에서 작동합니다.
Jesper 2013 년

@Jesper 나는 이것을 Eclipse에서 자주 보는 비슷한 문제와 혼동 할 수 있습니다.
Woot4Moo 2013 년

1
@Jesper 이것이이 모든 것이 나에게 의미가없는 이유입니다. 내가 찾은 모든 것은 1.5 JRE를 사용하는 1.6과 같은 오래된 Java에서 실행되는 JAR의 새 버전과 관련이 있습니다. 그러나이 문제는 거꾸로 보입니다.
Bryan A

-3

regedit를 사용하여 java 7에 해당하는 항목을 제거하십시오. 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.