Mój zespół programistów został ostatnio zmuszony do przeniesienia się do zdalnego środowiska programistycznego, w którym nie mamy pełnego dostępu do serwerów. Przed zmianą mieliśmy JAR, który działał dobrze na Javie 1.7 x64 razem z JRE 7. Kiedy przeszliśmy na nowy serwer, nasz JAR działał dobrze, ale potem jeden z administratorów serwera "zaktualizował" naszą Javę do starszej wersję i odinstalowałem ten, którego używaliśmy. Nie pytaj mnie dlaczego, nie wiem. Ponownie zainstalowałem Javę 1.7 i odinstalowałem 1.6 wraz ze środowiskami JRE.
Następujący problem występuje w czasie wykonywania, nie ma błędów kompilacji:
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.
Uruchomiłem ten sam plik JAR na moim laptopie bez żadnych problemów. Zarówno serwer, jak i mój laptop mają JDK 1.7 i JRE 7 w odpowiednich zmiennych% HOME% i ścieżce systemowej. Nawet ponownie zainstalowałem JRE 6 i umieściłem go później w zmiennych PATH środowiska systemowego z tym samym wynikiem.
Zmieniłem również rejestr z powrotem, aby spojrzeć na 1.6 i skutkuje to, co sprawdziłem i wydaje się, że jest to spowodowane posiadaniem wielu zainstalowanych Javas (co prowadzi do mojego pierwotnego problemu):
Exception in thread "main" java.lang.UnsupportedClassVersionError: ... :
Unsupported major.minor version 51.0
Byłbym wdzięczny za wszelkie spostrzeżenia, które wszyscy macie, ponieważ przeglądałem różne fora, ale nic nie wydaje się mieć dokładnie mojego problemu. Zdarzyło się to również na innym serwerze, którego używamy. Dzięki!
Aktualizacja: Nie udało się skompilować JAR do wersji 1.6 lub 1.7 i dopasować do JDK. Ponadto, dlaczego na świecie nowsza wersja Java miałaby zepsuć starszą, skompilowaną wersję?
źródło
java.exe
,javaw.exe
ijavaws.exe
jest przechowywany podWindows/SysWOW64
. Również z jakiegoś powodu po zainstalowaniu 1.8 SDK jest zainstalowanyjava.exe
,javaw.exe
ijavaws.exe
podC:/ProgramData/Oracle/Java/javapath
. Nie wiem dlaczego, ale je równieżjava -version
usunąłem i nadal działa.Po prostu wystąpił podobny błąd podczas instalowania Java 8 (jdk i jre) w systemie, w którym jest już uruchomiona Java 7.
Moje środowisko zostało poprawnie skonfigurowane (ścieżka i java_home zostały poprawnie zdefiniowane), ale problem wynika ze sposobu, w jaki działały instalatory Java z wersji wcześniejszych niż 8, czyli użyły do skopiowania trzech plików wykonywalnych (java.exe, javaw.exe i javaws.exe ) do katalogu systemowego Windows. Pozostają, chyba że zostaną nadpisane przez nową instalację w wersji starszej niż 8.
Jednak zamiast tego instalator Java 8 tworzy dowiązania symboliczne w nowym katalogu, C: \ ProgramData \ Oracle \ Java \ javapath, wskazując rzeczywistą lokalizację środowiska JRE 8.
Oznacza to, że faktycznie uruchomisz stare 7 exe, ale użyjesz nowych 8 DLL.
Tak więc rozwiązaniem jest po prostu usunięcie 3 plików exe Java, jak powyżej, z katalogu systemowego Windows.
Jeśli używasz 32-bitowej Javy w 64-bitowym systemie Windows, pliki exe znajdowałyby się w Windows \ SysWOW64, w przeciwnym razie w Windows \ System32.
źródło
Usunąłem pliki java w windows / system32, a także usunąłem c: \ ProgramData \ Oracle \ Java \ javapath ze zmiennej PATH, ponieważ były 3 dowiązania symboliczne do plików Java 1.8.
Miałem JDK 1.7 w zmiennej% JAVA_HOME% i java1.7 / bin w PATH.
PS1: Mój problem dotyczył języka Java 1.7 i Java 1.8.
PS2: Nie mogę dodać tego jako komentarza do odpowiedzi Victora, ponieważ nie mam wystarczającej liczby punktów.
źródło
W menu START wpisz „regedit”, aby otworzyć edytor rejestru
Przejdź do „HKEY_LOCAL_MACHINE” w menu eksploratora rejestru / drzewa po lewej stronie
Kliknij „OPROGRAMOWANIE” w rejestrach „HKEY_LOCAL_MACHINE”
Kliknij „JavaSoft” w rejestrach „OPROGRAMOWANIE”
Kliknij "Java Runtime Environment" na liście rejestrów "JavaSoft" Tutaj możesz zobaczyć różne wersje zainstalowanej javy
Kliknij „Java Runtime Environment” - po prawej stronie pojawi się 4-5 wierszy. Wybierz „CurrentVersion” i kliknij prawym przyciskiem myszy (wybierz opcję modyfikacji) Zmień wersję na „1.7”
Teraz magia została zakończona
źródło
Nie wiem, czy ktoś nadal śledzi ten wątek, ale ostatnio miałem ten problem, gdy próbowałem uruchomić ActiveMQ 5.10 jako usługę Windows.
Nie miałem ustawionej ścieżki JAVA_HOME. Miałem zainstalowane Java 6 i Java 7, ale domyślna wersja to v7. (tj. jeśli otworzyłem okno poleceń i wpisałem „java -version”).
Oto gdzie znalazła się wskazówka - „java -version” zwróciła „Java HotSpot (TM) 64-bitowa maszyna wirtualna serwera (wersja 23.1-b03, tryb mieszany)”, ale została zainstalowana usługa Win32 ...
Okazuje się, że jeśli używasz wrappera Win32 na maszynie 64-bitowej to w jakiś sposób decyduje się na użycie innej wersji Javy ...
Więc moją poprawką było odinstalowanie 32-bitowej wersji opakowania i zainstalowanie wersji 64-bitowej. niechęć do mojego komputera; chyba tylko nawyk ... Ale na szczęście w końcu rozwiązałem problem ...
źródło
Dla mojego Win7
Paradox był w byciu java.exe i javaw.exe w folderze System32. Otwierając ten folder, nie widziałem ich, ale używając wyszukiwania w menu Start, dostaję linki do tych plików, usunąłem je. Następne wyszukiwanie dało mi linki do plików z JAVA_HOME
magia )
źródło
Przejdź do katalogu z poprawną,
java.exe
tzn. Przejdź do wymaganej wersji JDKjava.exe
Uruchom
java.exe
z tego katalogu, ma pierwszeństwo przed ustawieniami rejestru i $ PATH.źródło
Rozwiązałem ten problem, odinstalowując Javę 1.8
źródło
Jar został skompilowany w celu zapewnienia
1.6
zgodności. Dlatego otrzymujesz ten błąd. Dwie rozdzielczości:1) Użyj Java 1.6
LUB
2) Ponownie skompiluj jar, aby był zgodny z Twoim środowiskiem
1.7
źródło
Używając regedit, usuń wpisy odpowiadające java 7. To zadziała.
źródło