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

제 개발 팀은 최근에 서버에 대한 전체 액세스 권한이없는 원격 개발 환경으로 이동했습니다. 변경 전에 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가 이전의 컴파일 된 버전을 깨뜨릴까요?



답변

이것은 자바 자체를 혼란스럽게 할 때 발생합니다. 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. 이런!


답변

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에 있습니다.


답변

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의 답변에 댓글로 추가 할 수 없습니다.


답변

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

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

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

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

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

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

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


답변

아직이 스레드를 팔로우중인 사람이 있는지는 모르겠지만 최근에 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 비트 버전을 설치하는 것이 었습니다. 내 컴퓨터에 대한 혐오; 그냥 습관 같네요 …하지만 운 좋게도 결국 문제를 해결했습니다 …


답변

내 Win7의 경우

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

매직)


답변

올바른 디렉토리로 변경하십시오. 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