Windows ignoriert JAVA_HOME: Wie wird JDK als Standard festgelegt?

87

Wie kann ich Windows davon überzeugen, das JDK anstelle einer JRE zu verwenden?

Diese Frage wurde schon einmal hier und anderswo gestellt:

Wie lege ich die Standard-Java-Installation / Laufzeit (Windows) fest?

Das Problem ist, dass Windows ignoriert JAVA_HOMEund auch die Tatsache ignoriert, dass ich das JDK-Bin-Verzeichnis zum ersten Eintrag im Pfad gemacht habe.

Wenn ich java -versionüber die Befehlszeile ausgeführt werde, wird anstelle der JDK 1.6-Installation die JRE 1.7 ausgeführt.

Ich vermute, dass dies ein spezifisches Problem für 1.7 ist und Windows 7 etwas tut, was es mit der Registrierung nicht tun sollte.

Irgendwelche Ideen, wie man das behebt?

Bearbeiten : Ups. Ich habe oben "erster Eintrag im Klassenpfad" geschrieben, als ich "Pfad" meinte. Es tut uns leid.

ccleve
quelle

Antworten:

129

Unter Windows verwendet die javaausführbare Datei die Windows-Registrierung, um die auszuführende Standardversion von Java zu finden.

Die java.exeauszuführende Kopie von wird mithilfe der PATHUmgebungsvariablen gefunden. Sofern Sie keine Schritte unternehmen, um dies zu ändern, wird standardmäßig eine Kopie im Windows-Verzeichnis gefunden. Da sich diese Kopie nicht in einem Java-Laufzeitverzeichnis befindet, wird sie anhand der Registrierung gefunden.

Sie müssen also entweder die Registrierung ändern oder die gewünschte Java-Version vor dem Windows-Verzeichnis in Ihrem Verzeichnis ablegen PATH.

erickson
quelle
11
OP hier. Siehe meine Bearbeitung oben. Ja, das hat es gelöst. Zwei Hinweise: Erstens scheint das Java-Installationsprogramm java.exe wirklich in Windows \ System32 abgelegt zu haben. Das ist erstaunlich für mich. Zweitens, wenn Sie den Pfad unter Computer / Eigenschaften / Erweiterte Systemeinstellungen / Umgebungsvariablen ändern, müssen Sie das ändern Systempfad, nicht der Benutzer Pfad. Der Systempfad steht an erster Stelle.
Ccleve
2
Ich werde auch den Punkt von user237815 unterstreichen, dass das Java-Installationsprogramm seine java.exe tatsächlich in Windows \ System32 ablegt. Das war für mich sicherlich nicht intuitiv. Erst nachdem ich die "Java-Version" von einer Konsole aus überprüft hatte, konnte ich feststellen, dass Windows jetzt die von meiner JDK-Installation gewünschte java.exe anstelle einer früheren und unerwünschten Version verwendete.
John Tobler
17
Das Problem wurde auch in meinem Fall behoben, indem die Dateien java.exe, javaw.exe und javaws.exe in meinem Windows / System32-Ordner umbenannt wurden. Dann und nur dann zeigt Java-Version die Version, die in JAVA_HOME und dem PATH
Inversus
6
Du hast meinen Tag gerettet! Das Verschieben des Eintrags in Bezug auf das JDK vor Windows in PATH hat das Problem behoben. Ich danke dir sehr!
the_dark_destructor
9
Ich setze unter Windows 10 die %JAVA_HOME%\binerste Position der pathVariablen ein und arbeite für mich.
Wendel
28

In Windows 8 möchten Sie möglicherweise das C:\ProgramData\Oracle\Java\javapath Verzeichnis entfernen .

vom Weg

Es hat mein Problem gelöst.

Arun
quelle
4
In Windows 10 ist dies: C: \ Programme (x86) \ Gemeinsame Dateien \ Oracle \ Java \ javapath. Dies wird automatisch zur Systempfadvariablen hinzugefügt. Löschen Sie das und legen Sie Ihren benutzerdefinierten Pfad fest.
Dexter
Der obige Kommentar half bei Windows 10
Saba Ahang
23

Ich habe auch dieses Problem. Ich verwende 1.6, möchte aber den Code erstellen, an dem ich mit 1.5 arbeite. Ich habe das JAVA_HOMEund PATH(sowohl Benutzer als auch System) ohne Erfolg geändert .

Die Antwort ist , dass der Installer für 1,6 gesunken java.exe, javaw.exeund javaws.exein meinen Windows\System32Ordner (Windows 7).

Ich löste es durch diese Dateien umbenennen java_wrong.exe, javaw_wrong.exeund javaws_wrong.exe. Erst danach wird die richtige Version von Java wie in JAVA_HOMEund definiert PATH. Ich habe die Dateien so umbenannt, weil sie dadurch leicht umkehrbar gelöscht wurden.

Hoffe das hilft!

Inversus
quelle
9
Anstatt umzubenennen, können Sie die PATH-Variable ändern und als ersten Wert% JAVA_HOME% \ bin angeben. Auf diese Weise ist dies der erste Wert, den es annehmen wird
maxivis
@ Maxivis Danke. Ich denke, das Problem könnte die Reihenfolge der PATH-Elemente gewesen sein, so dass Windows \ System32 vor JAVA_HOME stand. Ich habe sie einfach umbenannt, damit sie auf reversible Weise effektiv gelöscht werden.
Inversus
Irgendwie hat es für mich in keiner Weise funktioniert, JAVA_HOME in den Pfad zu setzen, dieser hat es tatsächlich gelöst.
Guilherme Orioli
12

Windows ignoriert nichts. Dies ist ein Problem mit Ihrem Setup. Windows verwendet nur das, was Sie bereitstellen. Es hat keine besonderen Kenntnisse von JAVA_HOME.

CLASSPATHhat auch nichts mit Windows zu tun. Für Windows ist es nur eine Umgebungsvariable, die zu einem Ordner erweitert wird.

Überprüfen Sie Ihre %PATH%Umgebungsvariable. Es ist das, was Windows dazu bringt, eins vor dem anderen zu finden. Der Pfad (wie der Beitrag, auf den Sie verlinkt haben) sollte zeigen%JAVA_HOME%\bin;<remainder of path> . Der Beitrag, auf den Sie verlinkt haben, gab Ihnen erneut die Möglichkeit, dies mithilfe einer Batchdatei festzulegen.

(Für andere, die dies möglicherweise nicht wissen: Der einfachste Weg,% PATH% zu überprüfen, besteht darin, eine Eingabeaufforderung zu öffnen und einzugeben echo %PATH%. Sie können auch dorthin gelangen, indem Sie Computerim rechten Bereich des Startmenüs mit der rechten Maustaste darauf klicken und Propertiesdann Folgendes auswählen Advanced System Settings: und die Environmental VariablesTaste.)

Ken White
quelle
@erickson: OK. Danke - das werde ich korrigieren. Es hat jedoch immer noch nichts mit Windows zu tun, worauf ich antwortete. :)
Ken White
Verstanden war ich nur besorgt, dass ein neues Missverständnis entstehen könnte; Java weiß nichts mehr JAVA_HOMEals Windows.
Erickson
Ich schätze die Korrektur. Ich bin selbst keine Java-Person (bisher nur begrenzte Erfahrung), daher ist es gut, dies für zukünftige Referenzzwecke zu wissen.
Ken White
1
JAVA_HOMEsollte auf das Stammverzeichnis der Java-Installation gesetzt werden. Der Pfad sollte haben %JAVA_HOME%\bin;&lt;remainder of path%gt;, sonst werden Sie Java, Java usw. nicht "finden". Natürlich betrachtet Windows die PATHVariable nur wirklich , aber einige Java-bezogene Tools sehen sich JAVA_HOMEgelegentlich an.
Edwin Buck
@ Edwin: Das Fehlen wurde ebenfalls behoben \bin. Vielen Dank.
Ken White
6

Ich hatte das gleiche Problem. Ich habe eine Reihe von Java-Versionen installiert und aus irgendeinem Grund wurde Java 1.7 anstelle von Java 1.6 verwendet, obwohl ich im Pfad zur Verwendung von 1.6 angegeben habe (C: \ jdk1.6.0_45_32 \ bin).

Ich musste den Pfad des JDK, das ich verwenden wollte (1.6), verschieben, um der erste Eintrag in der Umgebungsvariablen PATH zu sein, um sicherzustellen, dass Windows 1.6 anstelle von 1.7 verwendet.

So war beispielsweise die Umgebungsvariable PATH zuvor:

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

und nachdem ich das jdk als erstes verschoben hatte, funktionierte es:

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

Ich denke, das Windows-Installationsprogramm von Java 1.7 hat es in einem anderen Verzeichnis installiert, das sich bereits im PATH befindet, und wird daher zuerst anstelle des angegebenen benutzerdefinierten PATH-Eintrags C: \ jdk1.6.0_45_32 \ bin verwendet.

ewigminerals.com
quelle
Danke, Bro. Das Verschieben des JAVA_HOME \ bin-Pfads als erstes Element der Pfadvariablen hat mir das Leben gerettet.
ÖMER TAŞCI
4

Für meinen Fall in 'Path'Variable wurde ein Parameter wie ' C:\ProgramData\Oracle\Java\javapath;' hinzugefügt . Dieser Ort wurde mit java.exe, javaw.exeund javaws.exevon Java - 8 , die über neu installiertjdk.exe von Oracle.

Ich habe diesen Text aus dem Pfad entfernt, in dem mein Pfad bereits vorhanden ist %JAVA_HOME%\bin ist.

Jetzt 'JAVA_HOME'steuert die Variable meine Java-Version, die ich wollte.

Muhammadh Aadhil
quelle
3

Geben Sie hier die Bildbeschreibung einAngenommen, Sie haben JDK 10 nach JDK 8 installiert und in der Systemumgebungsvariablen den Pfad wie "C: \ ProgramData \ Oracle \ Java \ javapath" und dann die Java-Versionskontrolle über diesen Pfad festgelegt. JAVA_HOME wird ignoriert, selbst der hier festgelegte jdk 1.8-Pfad. Entfernen Sie daher "C: \ ProgramData \ Oracle \ Java \ javapath" im Pfad, um die Wirkung des JAVA_HOME-Pfads zu erhalten

Samir 007
quelle
2

Ich hatte Java 7 und 8 installiert und möchte zu Java 7 umleiten, aber die Java-Version in meinem cmd-Eingabeaufforderungsfenster zeigt Java 8.
Java 7 bin-Verzeichnispfad hinzugefügt ( C: \ Programme \ Java \ jdk1.7.0_10 \ bin ) zu PATH Variable am Ende, aber nicht funktioniert und zeigt Java 8. Also habe ich den Java 7-Pfad an den Anfang des Pfadwerts geändert und es hat funktioniert.
Öffnete ein neues cmd-Eingabeaufforderungsfenster und überprüfte meine Java-Version. Jetzt wird Java 7 angezeigt

bemannt
quelle
1

Setzen Sie die Umgebungsvariable Path auf das gewünschte Verzeichnis jdk / bin

David Levin
quelle
1

In meinem Fall hatte ich Java 7 und 8 (beide x64) installiert und möchte zu Java 7 umleiten, aber alles ist auf Java 8 eingestellt. Java verwendet die Umgebungsvariable PATH:

C: \ ProgramData \ Oracle \ Java \ javapath

als erste Option, um nach der Laufzeit des Ordners zu suchen (ist ein versteckter Ordner). Dieser Pfad enthält 3 Symlinks, die nicht bearbeitet werden können.

In meinem PC sieht die Umgebungsvariable PATH folgendermaßen aus:

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

In meinem Fall sollte es so aussehen:

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

Ich musste die Symlinks ausschneiden und an einer anderen Stelle einfügen, damit Java sie nicht finden kann und ich sie später wiederherstellen kann.

Nachdem Sie die Umgebungsvariablen JAVA_HOME und JRE_HOME auf die gewünschten Laufzeiten der Java-Ordner eingestellt haben (in meinem Fall Java 7), wird der Befehl ausgeführt java -version die gewünschte Java-Laufzeit anzeigen. Ich stelle fest, dass es nicht nötig ist, sich mit der Registrierung anzulegen.

Getestet auf Win7 x64.

Zerbrochenes Fenster
quelle
1

Dieses Problem ist wahrscheinlich auf frühere Versionen von Java zurückzuführen, die auf Ihrem System installiert sind. Überprüfen Sie zuerst Ihre Umgebungsvariablen sorgfältig und entfernen Sie alle Umgebungsvariablen, die sich auf frühere Versionen von JAVA beziehen, und ersetzen Sie diese Pfade zu

C:\Program Files\Java\<your new jdk version>\bin
Tanay Toshniwal
quelle
0

Hier gibt es einen zusätzlichen Faktor; Zusätzlich zu den Java-ausführbaren Dateien, die in der Java-Installation an einer beliebigen Stelle abgelegt werden, legt das Java-Installationsprogramm unter Windows auch Kopien einiger dieser ausführbaren Dateien in Ihrem Windows-System32-Verzeichnis ab, sodass Sie wahrscheinlich diejenige verwenden, die jede ausführbare Java-Datei war zuletzt installiert.

Ben Brammer
quelle
0

Nur für den Fall, dass Sie die .BAT-Datei als Windows-Dienst verwenden, würde ich empfehlen, den Windows-Dienst zu deinstallieren und erneut zu installieren, nachdem Sie% JAVA_HOME% geändert haben, um auf die richtige Java-Version zu verweisen.

Aurun
quelle
0

Nachdem ich einige Zeit mit diesem Problem zu kämpfen hatte und darüber recherchiert hatte, gelang es mir schließlich, es mit den folgenden Schritten zu lösen:

1) Installieren Sie die JDK-Version 12
2) Erstellen Sie eine neue Variable in der
Systemvariablen. 3) Benennen Sie sie als JAVA_HOME und geben Sie den JDK-Installationspfad an.
4) Fügen Sie diese Variable im Pfad hinzu und verschieben Sie sie nach oben.
5) Gehen Sie zu C: \ Programme (86) \ Gemeinsame Dateien \ Oracle \ Java \ javapath und ersetzen Sie java.exe und javaw.exe durch die entsprechenden Dateien mit demselben Namen aus dem Ordner pathtojavajdk / bin

Schließlich habe ich die Standardversion von Java in cmd mit "java -version" überprüft und es hat funktioniert!

Rodrigo Araujo
quelle