JDK installieren jdk-21 wird nicht erkannt

hk

Bekanntes Mitglied
Hallo Forum,
ich habe soeben Openjdk-21.0.1 heruntergeladen und in das Java-Verzeichnis gestellt und die JAVA_HOME Variable darauf gesetzt und neu gestartet. Wenn ich nun im Terminal java -version eingebe wird immer noch die Version 19 als aktuell angezeigt. Warum?
lg heinz
 
Dann ist da wahrscheinlich noch ein Eintrag vorher in welchem Java 19 gefunden wird, oder JAVA_HOME wird woanders hin aufgeloest. Ich weisz nicht wie dynamisch das bei Microsoft Windows. Eventuell loest der das nur einmal beim Starten auf und dann ist es noch falsch.
 
Prüfe den Pfad - was ist alles genau im Pfad? Ist irgendwo noch eine java.exe?

Wenn Du auch mal eine ganz alte Java Installation hattest, dann hast Du z.B. java.exe, javac.exe u.s.w. in das system32 Verzeichnis installiert bekommen. Die waren dann im Pfad immer an erster Stelle und das waren dann Wrapper, die in der Registry geschaut haben, welches Java gestartet werden soll.

Du kannst unter Windows 11 auch einmal where java in der Eingabeaufforderung eingeben. Das zeigt Dir dann alle java im Pfad an. Bei mir eben hat er dann angezeigt:
  • ein java 8
  • ein java 11
  • ein java 17

Das liegt einfach daran, dass alle auf dem Pfad waren - Je nachdem, was für ein Java ich brauche, setze ich JAVA_HOME und Pfad neu wobei letzteres einfach %JAVA_HOME%\bin an den Anfang vom Pfad setzt. Das führt dann zu solchen Ketten 🙂
 
Prüfe den Pfad - was ist alles genau im Pfad? Ist irgendwo noch eine java.exe?

Wenn Du auch mal eine ganz alte Java Installation hattest, dann hast Du z.B. java.exe, javac.exe u.s.w. in das system32 Verzeichnis installiert bekommen. Die waren dann im Pfad immer an erster Stelle und das waren dann Wrapper, die in der Registry geschaut haben, welches Java gestartet werden soll.

Du kannst unter Windows 11 auch einmal where java in der Eingabeaufforderung eingeben. Das zeigt Dir dann alle java im Pfad an. Bei mir eben hat er dann angezeigt:
  • ein java 8
  • ein java 11
  • ein java 17

Das liegt einfach daran, dass alle auf dem Pfad waren - Je nachdem, was für ein Java ich brauche, setze ich JAVA_HOME und Pfad neu wobei letzteres einfach %JAVA_HOME%\bin an den Anfang vom Pfad setzt. Das führt dann zu solchen Ketten 🙂
In den Systemvariablen habe ich einen Java Eintrag: JAVA_HOME C:\Program Files\Java\jdk-21.0.1
Im Pfad finde ich folgende Eintragungen:
C:\Program Files\Common Files\Oracle\Java\javapath
C:\Program Files (x86)\Common Files\Oracle\Java\javapath
%JAVA_HOME%\bin

in der System32 gibt es einen Eintrag: JavaScriptCollectionAgent.dll

Das mit "where java" blitzt nur kurz auf, da kann ich nichts sehen,
lg heinz
 
Das mit "where java" blitzt nur kurz auf, da kann ich nichts sehen
Da einfach erst eine Eingabeaufforderung starten und den Befehl in der Eingabeaufforderung eingeben.

Im Pfad finde ich folgende Eintragungen:
C:\Program Files\Common Files\Oracle\Java\javapath
C:\Program Files (x86)\Common Files\Oracle\Java\javapath
%JAVA_HOME%\bin

Wenn im Pfad mehrere Einträge sind, dann nimmt er das erste Java, das er finden kann. Daher den richtigen Eintrag an den Anfang setzen. Und man muss aufpassen mir der Nutzung von Umgebungsvariablen in Umgebungsvariablen. Nicht dass die Reihenfolge, in der diese Variablen gesetzt werden, zum Problem wird. Sollte PATH vor JAVA_HOME gesetzt werden, dann hat man da nur noch ein \bin im Pfad und das dürfte nichts bringen.

Sowas kann man aber prüfen: Einfach ein echo %PATH% ausführen (in einer Eingabeaufforderung!)
Dann sieht man den konkreten Pfad, der gesetzt wurde ohne jede weitere Umgebungsvariable!
 
Sowas kann man aber prüfen: Einfach ein echo %PATH% ausführen (in einer Eingabeaufforderung!)
Dann sieht man den konkreten Pfad, der gesetzt wurde ohne jede weitere Umgebungsvariable!
Das Ergebnis der Anfragen sieht nicht gut aus:
PS C:\Users\User> echo %PATH%
%PATH%
PS C:\Users\User> where java
PS C:\Users\User>
 
Du bist in PowerShell und nicht auf einer Eingabeaufforderung.

Starte sonst einfach einmal ein cmd - das gibt Dir eine Eingabeaufforderung.
 
Starte sonst einfach einmal ein cmd - das gibt Dir eine Eingabeaufforderung.
Ok, ich habe einfach %JAVA_HOME% an den Anfang des Pfads gesetzt und nun dürfte es funktionieren. Die Anzeigen:
C:\Users\User>echo %PATH%
C:\Program Files\Java\jdk-21.0.1\bin;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\PC Connectivity Solution\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\iCLS\;C:\Program Files\Intel\Intel(R) Management Engine Components\iCLS\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\NVIDIA Corporation\NVIDIA NGX;C:\Program Files (x86)\Common Files\Acronis\VirtualFile\;C:\Program Files (x86)\Common Files\Acronis\VirtualFile64\;C:\Program Files (x86)\Common Files\Acronis\FileProtector\;C:\Program Files (x86)\Common Files\Acronis\FileProtector64\;C:\Program Files (x86)\Common Files\Acronis\SnapAPI\;C:\Program Files\Microsoft Network Monitor 3\;D:\cygwin64\bin\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;D:\Windows Kits\10\Windows Performance Toolkit\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\dotnet\;C:\Users\User\AppData\Local\Microsoft\WindowsApps;C:\Users\User\AppData\Local\GitHubDesktop\bin;C:\Users\User\.dotnet\tools

C:\Users\User>where java
C:\Program Files\Java\jdk-21.0.1\bin\java.exe
C:\Program Files\Common Files\Oracle\Java\javapath\java.exe
C:\Program Files (x86)\Common Files\Oracle\Java\javapath\java.exe

C:\Users\User>

Vielen Dank
 
Mal was Anderes - Wozu brauchst du das überhaupt? Programme wie Maven verwenden JAVA_HOME, IDE's verwenden was mitgeliefert wird oder lassen sich einstellen. Auch andere Java-Software wird als Binary ausgeliefert. Applets gibt es nicht mehr. Also wozu?
Ich mach das schon seit Jahren nicht mehr.
 
Mal was Anderes - Wozu brauchst du das überhaupt? Programme wie Maven verwenden JAVA_HOME, IDE's verwenden was mitgeliefert wird oder lassen sich einstellen. Auch andere Java-Software wird als Binary ausgeliefert. Applets gibt es nicht mehr. Also wozu?
Ich mach das schon seit Jahren nicht mehr.
Alles hat damit begonnen dass ich mit der NetBean 15 Installation von ANT auf MAVEN umsteigen wollte. Seither funktionieren meine alten ANT-Programme nicht mehr und mit MAVEN habe ich Probleme mit der BOM. Es ist mir noch kein einziges Mal gelungen ein lauffähiges JAR-Programm außerhalb der IDE zum Laufen zu bringen. Nun dann probiert man halt das Eine und das Andere und kommt dann zu solchen Problemen.
 
JAVA_HOME hat seine Bedeutung mittlerweile verloren, Windows interessiert das schon mal gar nicht, da zählt nur der PATH.
Es war damals interessant, als man noch mehrere Java-Versionen installieren konnte und über die Optionen in der Systemsteuerung ausgewählt hat, welche für Applets verwendet werden soll.
Mittlerweile ist es üblich, mit jlink sozusagen eine JRE aus deiner JDK zu erstellen und mit deiner Software auszuliefern.

Im Normalfall ist die Umgebungsvariable nur noch dann wichtig, wenn du z.B. Batch Datei verwendest, die sich den Pfad aus eben jener Variable holt.
 
JAVA_HOME hat seine Bedeutung mittlerweile verloren
Nein, das stimmt so nicht. Der Path interessiert nur, wenn Du java direkt startest. Wenn Du aber Wrapper startest wie mvnw (oder gradlew vermutlich ebenso), dann wird das JAVA_HOME ausgewertet und da interessiert nicht, was auf dem Pfad ist. Da ist das JAVA_HOME Pflicht und ohne gesetztes JAVA_HOME bekommst Du einen Fehler.

Daher sind als Entwickler eben die von dir genannten Batch Dateien doch sehr wichtig.

Es war damals interessant, als man noch mehrere Java-Versionen installieren konnte und über die Optionen in der Systemsteuerung ausgewählt hat, welche für Applets verwendet werden soll.
Da wirfst Du auch etwas durcheinander. Das hatte mit JAVA_HOME nichts zu tun. Statt dessen gab es Wrapper Binaries, welche bei der Installation in System32 (Oder ins Windows Verzeichnis? Ist so lange her) gepackt wurden und die bei der Deinstallation auch auf dem System blieben.
Diese Wrapper hat dann Schlüssel in der Registry ausgewertet um dann das entsprechende Zielbinary zu starten.
 

Zurück
Oben