[英]Registry Key '…' has value '1.7', but '1.6' is required. Java 1.7 is Installed and the Registry is Pointing to it
我的開發團隊最近被迫轉到我們無法完全訪問服務器的遠程開發環境。 在轉換之前,我們有一個JAR在Java 1.7 x64和JRE 7上正常運行。當我們轉移到新服務器時,我們的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%變量和系統路徑中都有JDK 1.7和JRE 7。 我甚至重新安裝了JRE 6並將其放在系統環境PATH變量中,結果相同。
我還更改了注冊表以查看1.6,它導致以下內容,我查了一下,它似乎是安裝了多個Javas(導致我原來的問題):
Exception in thread "main" java.lang.UnsupportedClassVersionError: ... :
Unsupported major.minor version 51.0
我很感激你們所擁有的任何見解,因為我一直在尋找各種論壇,但似乎沒有任何問題。 此外,這也發生在我們正在使用的另一台服務器上。 謝謝!
更新:沒有運氣將JAR重新編譯為1.6或1.7並匹配JDK。 另外,為什么世界上新版本的Java會破壞舊的編譯版本呢?
當你以某種方式混淆java本身時會發生這種情 您正在嘗試運行它發現JRE 7的Java 6 VM。即使您在錯誤配置的環境中鍵入命令行java
或java -version
,它也可能顯示此問題。 JAR不是問題,除非在JAR中的代碼在Windows注冊表中查找的情況非常不太可能(可能不是您的情況)。
在我的例子中,我在Windows/System32
文件夾中有來自Java 6的java.exe
, javaw.exe
和javaws.exe
(不知道它是如何存在的)。 JDK和JRE的其余部分位於C:\\Java\\jdk_1.7.0\\bin
中的PATH中。 哎呀!
在已經運行Java 7的系統上安裝java 8(jdk和jre)時遇到類似的錯誤。
錯誤:注冊表項'Software \\ JavaSoft \\ Java Runtime
環境'\\ CurrentVersion'的值為'1.8',但需要'1.7'。
錯誤:找不到java.dll錯誤:找不到Java SE Runtime Environment。
我的環境設置正確(路徑和java_home正確定義),但問題出現在8位Java安裝程序工作的方式之前,這就是他們用來復制三個可執行文件(java.exe,javaw.exe和javaws.exe) )到Windows系統目錄。 除非被新的8級安裝覆蓋,否則這些仍然存在。
但是,Java 8安裝程序會在新目錄C:\\ ProgramData \\ Oracle \\ Java \\ javapath中創建符號鏈接,指向實際的JRE 8位置。
這意味着您實際上將運行舊的7個exes但使用新的8個DLL。
因此,解決方案只是從Windows系統目錄中刪除3個Java exes,如上所述。
如果您在64位Windows上運行32位Java,那么exes將在Windows \\ SysWOW64中,否則在Windows \\ System32中。
我已經刪除了windows / system32上的java文件,我也從PATH變量中刪除了c:\\ ProgramData \\ Oracle \\ Java \\ javapath,因為java 1.8文件有3個符號鏈接。
我在%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
我通過卸載Java 1.8解決了這個問題
該jar被編譯為1.6
兼容。 這就是你得到這個錯誤的原因。 兩項決議:
1)使用Java 1.6
要么
2)重新編譯jar以符合您的環境1.7
使用regedit,刪除對應於java 7的條目。它將起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.