Windows ignoruje JAVA_HOME: jak ustawić JDK jako domyślny?


89

Jak przekonać system Windows do używania JDK zamiast JRE?

To pytanie zadawano już wcześniej, tutaj i gdzie indziej:

Jak ustawić domyślną instalację / środowisko wykonawcze Java (Windows)?

Problem polega na tym, że system Windows ignoruje, JAVA_HOMEa także ignoruje fakt, że jako pierwszy wpis w ścieżce ustawiłem katalog bin JDK.

Kiedy uruchamiam java -versionz wiersza poleceń, zamiast wywoływać moją instalację JDK 1.6, uruchamia on JRE 1.7.

Domyślam się, że jest to problem specyficzny dla wersji 1.7, a Windows 7 robi coś, czego nie powinien robić z rejestrem.

Jakieś pomysły, jak to naprawić?

Edycja : Ups. Napisałem „pierwszy wpis w ścieżce klas” powyżej, kiedy miałem na myśli „ścieżkę”. Przepraszam.

Odpowiedzi:


132

W systemie Windows javaplik wykonywalny korzysta z rejestru systemu Windows w celu zlokalizowania domyślnej wersji oprogramowania Java do uruchomienia.

Kopię programu java.exedo uruchomienia można znaleźć za pomocą PATHzmiennej środowiskowej. O ile nie podejmiesz kroków, aby to zmienić, domyślnie kopia zostanie znaleziona w katalogu systemu Windows. Ponieważ ta kopia nie znajduje się w katalogu środowiska wykonawczego Java, lokalizuje ją, przeglądając rejestr.

Musisz więc zmodyfikować rejestr lub umieścić żądaną wersję Java przed katalogiem Windows w pliku PATH.


11
OP tutaj. Zobacz moją edycję powyżej. Tak, to rozwiązało problem. Dwie uwagi: po pierwsze, wydaje się, że instalator Javy naprawdę umieścił java.exe w Windows \ System32. To jest dla mnie zdumiewające. Po drugie, modyfikując ścieżkę w obszarze Komputer / Właściwości / Zaawansowane ustawienia systemu / Zmienne środowiskowe, należy zmodyfikować ścieżkę systemową , a nie ścieżkę użytkownika . Ścieżka systemowa stawia siebie na pierwszym miejscu.
ccleve

2
Podkreślę również argument użytkownika237815, że wydaje się, że instalator Javy w rzeczywistości umieszcza java.exe w systemie Windows \ System32. Z pewnością nie było to dla mnie intuicyjne. Dopiero po sprawdzeniu "wersji java" z konsoli uzyskałem poziom komfortu, że Windows używa teraz java.exe, którego chciałem z mojej instalacji JDK, zamiast jakiejś poprzedniej i niepożądanej wersji.
John Tobler,

17
Problem został również rozwiązany w moim przypadku, zmieniając nazwy plików java.exe, javaw.exe i javaws.exe w folderze Windows / System32. Wtedy, i tylko wtedy, java -version pokazuje wersję ustawioną w JAVA_HOME i PATH
Inversus

6
Uratowałeś mi dzień! Przeniesienie wpisu związanego z JDK przed Windows w PATH rozwiązało problem. Dziękuję bardzo!
the_dark_destructor

9
Ustawiłem %JAVA_HOME%\binpierwszą pozycję pathzmiennej na Windows 10 i pracuję do mnie.
Wendel

30

W systemie Windows 8 możesz chcieć usunąć C:\ProgramData\Oracle\Java\javapath katalog.

od ścieżki

To rozwiązało mój problem.


5
W systemie Windows 10 jest to: C: \ Program Files (x86) \ Common Files \ Oracle \ Java \ javapath. To jest automatycznie dodawane do zmiennej ścieżki systemowej. Usuń to i ustaw niestandardową lokalizację ścieżki.
Dexter

1
powyższy komentarz pomógł w przypadku Windows 10
Saba Ahang

23

Ja też mam ten problem. Używam wersji 1.6, ale chcę zbudować kod, nad którym pracuję, z wersją 1.5. Zmieniłem JAVA_HOMEi PATH(zarówno użytkownika, jak i system) bezskutecznie.

Odpowiedź jest, że instalator dla 1,6 spadła java.exe, javaw.exei javaws.exedo mojego Windows\System32folderu (Windows 7).

Rozwiązałem to przez zmianę nazwy tych plików java_wrong.exe, javaw_wrong.exeoraz javaws_wrong.exe. Dopiero po wykonaniu tej czynności pobiera poprawną wersję Java, zgodnie z definicją w JAVA_HOMEi PATH. W ten sposób zmieniłem nazwy plików, ponieważ w ten sposób zostały usunięte w łatwo odwracalny sposób.

Mam nadzieję że to pomoże!


10
Zamiast zmieniać nazwę, możesz zmodyfikować zmienną PATH, podając jako pierwszą wartość% JAVA_HOME% \ bin, w ten sposób byłaby to pierwsza wartość, którą przyjmie
maxivis

1
@maxivis Thanks. Wydaje mi się, że problemem mogło być takie uporządkowanie elementów PATH, że Windows \ System32 był przed JAVA_HOME. Po prostu zmieniłem ich nazwy, aby były skutecznie usuwane w odwracalny sposób.
Inversus

W jakiś sposób ustawienie JAVA_HOME w path nie działało w żaden sposób dla mnie, ten faktycznie to rozwiązał.
Guilherme Orioli

12

Windows niczego nie ignoruje. To jest problem z twoją konfiguracją; Windows używa tylko tego, co podałeś. Nie ma specjalnej wiedzy o JAVA_HOME.

CLASSPATHnie ma też nic wspólnego z systemem Windows. W systemie Windows jest to tylko zmienna środowiskowa, która jest rozwijana do lokalizacji folderu.

Sprawdź %PATH%zmienną środowiskową. To właśnie sprawia, że ​​system Windows znajduje jeden przed drugim. Ścieżka (zgodnie z postem, do którego utworzyłeś łącze) powinna wskazywać %JAVA_HOME%\bin;<remainder of path>. Ponownie post, do którego utworzyłeś łącze, umożliwił ustawienie tego za pomocą pliku wsadowego.

(Dla innych, którzy mogą nie wiedzieć, to: Najłatwiej sprawdzić% PATH% jest otworzyć wiersz polecenia i typ echo %PATH%. Można również dostać się tam przez kliknięcie prawym przyciskiem myszy Computerw prawym panelu menu Start i wyborze Properties, a następnie Advanced System Settings, i Environmental Variablesprzycisk tne .)


@erickson: OK. Dzięki - poprawię to. Jednak nadal nie ma to nic wspólnego z systemem Windows, co było celem mojej odpowiedzi. :)
Ken White

Zrozumiano, obawiałem się tylko, że może powstać nowe błędne przekonanie; Java nie wie nic więcej JAVA_HOMEniż Windows.
erickson

Doceniam korektę. Sam nie jestem osobą korzystającą z języka Java (dotychczasowe doświadczenie jest ograniczone), więc warto o tym wiedzieć na przyszłość.
Ken White,

1
JAVA_HOMEpowinien być ustawiony na katalog główny instalacji Java. Ścieżka powinna mieć %JAVA_HOME%\bin;&lt;remainder of path%gt;, w przeciwnym razie nie będzie można "znaleźć" java, javac itp. Oczywiście Windows tak naprawdę patrzy tylko na PATHzmienną, ale niektóre narzędzia związane z Javą sprawdzają JAVA_HOMEczasami.
Edwin Buck,

@Edwin: Naprawiono również brakujący \bin. Dzięki.
Ken White,

6

Miałem ten sam problem. Mam zainstalowanych kilka wersji Javy iz jakiegoś powodu używano Javy 1.7 zamiast Javy 1.6, mimo że podałem w ścieżce do użycia 1.6 (C: \ jdk1.6.0_45_32 \ bin).

Musiałem przesunąć ścieżkę JDK, którego chciałem użyć (1.6), aby była pierwszym wpisem w zmiennej środowiskowej PATH, aby upewnić się, że system Windows używa wersji 1.6 zamiast 1.7.

Na przykład zmienna środowiskowa PATH była wcześniej:

C:\Program Files (x86);...<other entries>;C:\dev\ant181\bin;C:\jdk1.6.0_45_32\bin

i po tym, jak przeniosłem jdk na pierwszy, zadziałało:

C:\jdk1.6.0_45_32\bin;C:\Program Files (x86);...<other entries>;C:\dev\ant181\bin

Domyślam się, że instalator Javy 1.7 dla systemu Windows zainstalował ją w jakimś innym katalogu już w PATH, w ten sposób wykorzystując go jako pierwszy zamiast określonego niestandardowego wpisu PATH C: \ jdk1.6.0_45_32 \ bin;


dzięki, stary. Przeniesienie JAVA_HOME \ bin path jako pierwszego elementu zmiennej Path uratowało mi życie.
ÖMER TAŞCI

4

Dla mojej 'Path'zmiennej Case w zmiennej został dodany parametr taki jak „ C:\ProgramData\Oracle\Java\javapath;”. Ta lokalizacja miała java.exe, javaw.exei javaws.exejava 8, która jest nowo instalowana przez jdk.exeOracle.

Usunąłem ten tekst ze Ścieżki, gdzie moja Ścieżka już %JAVA_HOME%\binz nim jest.

Teraz zmienna 'JAVA_HOME'kontroluje moją wersję Javy, której chciałem.


4

wprowadź opis obrazu tutajZałóżmy, że zainstalowano pakiet JDK 10 po JDK 8 iw systemowej zmiennej środowiskowej ustawiono ścieżkę, taką jak „C: \ ProgramData \ Oracle \ Java \ javapath”, a następnie kontrolę wersji Java za pomocą tej ścieżki. zignoruje JAVA_HOME nawet ustawioną tutaj ścieżkę jdk 1.8 Więc usuń "C: \ ProgramData \ Oracle \ Java \ javapath" w ścieżce, aby uzyskać efekt ścieżki JAVA_HOME


2

Mam zainstalowaną Javę 7 i 8 i chcę przekierować do java 7, ale wersja java w moim oknie zachęty cmd pokazuje Java 8.
Dodano ścieżkę katalogu bin Java 7 ( C: \ Program Files \ Java \ jdk1.7.0_10 \ bin ) do zmiennej PATH na końcu, ale nie wyszło i pokazuje Java 8. Więc zmieniłem ścieżkę Java 7 na początek wartości ścieżki i zadziałało.
Otworzyłem nowe okno zachęty cmd i sprawdziłem moją wersję java, a teraz pokazuje Java 7



1

W moim przypadku mam zainstalowaną Javę 7 i 8 (obie x64) i chcę przekierować do java 7, ale wszystko jest ustawione na Javę 8. Java używa zmiennej środowiskowej PATH:

C: \ ProgramData \ Oracle \ Java \ javapath

jako pierwsza opcja wyszukiwania czasu wykonywania folderu (jest to folder ukryty). Ta ścieżka zawiera 3 linki symboliczne, których nie można edytować.

Na moim komputerze zmienna środowiskowa PATH wygląda następująco:

C: \ ProgramData \ Oracle \ Java \ javapath; C: \ Windows \ System32; C: \ Program Files \ Java \ jdk1.7.0_21 \ bin;

W moim przypadku powinno to wyglądać tak:

C: \ Windows \ System32; C: \ Program Files \ Java \ jdk1.7.0_21 \ bin;

Musiałem wyciąć i wkleić linki symboliczne w innym miejscu, aby java nie mógł ich znaleźć i mogę je później przywrócić.

Po ustawieniu zmiennych środowiskowych JAVA_HOME i JRE_HOME na żądane środowiska wykonawcze folderów Java (w moim przypadku jest to Java 7), polecenie java -versionpowinno wyświetlić żądane środowisko wykonawcze Java. Zauważam, że nie ma potrzeby majstrować przy rejestrze.

Testowane na Win7 x64.


1

Ten problem jest prawdopodobnie spowodowany wcześniejszymi wersjami oprogramowania Java zainstalowanymi w systemie. Najpierw dokładnie sprawdź swoje zmienne środowiskowe i usuń wszystkie zmienne środowiskowe związane z poprzednimi wersjami JAVA i zamień te ścieżki na

C:\Program Files\Java\<your new jdk version>\bin

0

Jest tu dodatkowy czynnik; oprócz plików wykonywalnych java, które instalacja java umieszcza wszędzie tam, gdzie je poprosisz, w systemie Windows instalator java umieszcza również kopie niektórych z tych plików wykonywalnych w katalogu system32 systemu Windows, więc prawdopodobnie będziesz używać każdego pliku wykonywalnego Java, który był zainstalowany ostatnio.


0

Na wszelki wypadek, jeśli używasz pliku .BAT jako usługi systemu Windows, sugerowałbym odinstalowanie usługi Windows i ponowne jej zainstalowanie po zmianie% JAVA_HOME%, aby wskazywał na właściwą wersję Java.


0

Po pewnym czasie zmagania się z tym problemem i zbadania go, w końcu udało mi się go rozwiązać, wykonując następujące kroki:

1) zainstaluj wersję jdk 12
2) Utwórz nową zmienną w zmiennej systemowej
3) Nazwij ją jako JAVA_HOME i podaj ścieżkę instalacji jdk
4) dodaj tę zmienną w ścieżce i przenieś ją na górę.
5) przejdź do C: \ Program Files (86) \ Common Files \ Oracle \ Java \ javapath i zamień java.exe i javaw.exe na odpowiednie pliki o tych samych nazwach ze ścieżki do folderu pathtojavajdk / bin

Wreszcie sprawdziłem domyślną wersję java w cmd z "java -version" i zadziałało!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.