Windows 10/11¶
Übersicht¶
Dieses Skript installiert automatisch Java 25 unter Windows mithilfe des Windows Package Managers (winget).
Download¶
Voraussetzungen¶
Anforderungen:
Windows 10 (Version 1809+) oder Windows 11
Windows Package Manager (winget) - normalerweise auf modernen Windows-Systemen vorinstalliert
Ausführung:
Doppelklicke einfach auf install_java25_windows.cmd oder führe es über die Eingabeaufforderung aus. Das Skript fordert bei Bedarf automatisch Administratorrechte an.
Was das Skript macht¶
1. Alte Java-Installationen deinstallieren¶
Das Skript durchsucht die Windows-Registrierung und entfernt alle vorhandenen Java-Installationen:
# Search for Java installations in registry
$registryPaths = @(
"HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*",
"HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*",
"HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*"
)
# Pattern matching for Java vendors
$vendorPattern = "(?i)(Temurin|Adoptium|AdoptOpenJDK|OpenJDK|Microsoft Build of OpenJDK|Oracle JDK|Oracle Java|Corretto|Zulu|Semeru)"
# Uninstall using MSI product code or quiet uninstall string
msiexec.exe /x {PRODUCT_CODE} /qn /norestart
Nach der Deinstallation der Pakete entfernt das Skript übrig gebliebene Verzeichnisse:
# Remove Java directories
Remove-Item "C:\Program Files\Java\*" -Recurse -Force
Remove-Item "C:\Program Files\Eclipse Adoptium\*" -Recurse -Force
Remove-Item "C:\Program Files\Temurin\*" -Recurse -Force
# ... and more
2. Java über Winget installieren¶
Das Skript verwendet den Windows Package Manager, um Java 25 zu installieren:
# Update winget sources
winget source update
# Install Eclipse Adoptium Temurin 25 JDK
winget install --id EclipseAdoptium.Temurin.25.JDK --exact --source winget `
--silent --scope machine --disable-interactivity `
--accept-source-agreements --accept-package-agreements
3. Installiertes Java lokalisieren¶
Das Skript sucht nach dem installierten Java in gängigen Verzeichnissen:
# Search in common installation directories
$roots = @(
"C:\Program Files\Eclipse Adoptium",
"C:\Program Files\Temurin",
"C:\Program Files\Java"
)
# Find directories matching jdk-25* with javac.exe
Get-ChildItem -Path $root -Directory |
Where-Object {
$_.Name -match "^jdk-?25" -and
(Test-Path (Join-Path $_.FullName "bin\javac.exe"))
}
4. Umgebungsvariablen konfigurieren¶
Das Skript erstellt einen stabilen Junction-Point und konfiguriert Umgebungsvariablen:
# Create a stable junction at C:\Program Files\Java\jdk-25
# pointing to the actual installation directory
New-Item -Path "C:\Program Files\Java\jdk-25" -ItemType Junction -Target $detectedJavaHome
# Set JAVA_HOME environment variable (Machine and User level)
[Environment]::SetEnvironmentVariable("JAVA_HOME", "C:\Program Files\Java\jdk-25", "Machine")
[Environment]::SetEnvironmentVariable("JAVA_HOME", "C:\Program Files\Java\jdk-25", "User")
Der PATH wird von alten Java-Einträgen bereinigt und aktualisiert:
# Remove all old Java paths
$javaPathPattern = "(?i)(\\Java(\\|$)|\\Eclipse Adoptium(\\|$)|\\Temurin(\\|$)|...)"
# Clean PATH and add new Java bin directory at the front
$cleanPath = # ... cleaned path without old Java entries
$newPath = "C:\Program Files\Java\jdk-25\bin;" + $cleanPath
# Set the new PATH
[Environment]::SetEnvironmentVariable("Path", $newPath, "Machine")
Anschließend sendet das Skript Umgebungsänderungen an alle Anwendungen:
# Notify Windows that environment variables changed
# This uses Windows API SendMessageTimeout to broadcast WM_SETTINGCHANGE
[Win32.NativeMethods]::SendMessageTimeout(
$HWND_BROADCAST,
$WM_SETTINGCHANGE,
[IntPtr]::Zero,
"Environment",
$SMTO_ABORTIFHUNG,
5000,
[ref]$result
)
5. Installation überprüfen¶
Abschließend testet das Skript, ob Java korrekt funktioniert:
# Create a test Java file
@'
public class HelloJava25 {
public static void main(String[] args) {
System.out.println("Java 25 smoke test");
}
}
'@ | Set-Content -Path $sourceFile -Encoding ASCII
# Compile and run the test
& "$env:JAVA_HOME\bin\javac.exe" $sourceFile
$output = & "$env:JAVA_HOME\bin\java.exe" -cp $tempDir "HelloJava25"
# Verify output
if ($outputText -ne "Java 25 smoke test") {
throw "The Java 25 smoke test failed."
}
# Show installed versions
& java.exe -version
& javac.exe -version
Fehlerbehebung¶
- Winget nicht gefunden:
Installiere den Windows Package Manager aus dem Microsoft Store oder aktualisiere Windows.
- Zugriff verweigert:
Klicke mit der rechten Maustaste auf das Skript und wähle „Als Administrator ausführen“.
- Umgebungsvariablen in der aktuellen Sitzung nicht aktualisiert:
Schließe die Eingabeaufforderung oder das Terminal und öffne es erneut. Die Änderungen sind systemweit, erfordern aber eine neue Sitzung.
- Alte Java-Installationen nicht entfernt:
Einige Installationen müssen möglicherweise manuell über Einstellungen > Apps entfernt werden.
- Smoke-Test fehlgeschlagen:
Führe das Skript erneut aus oder überprüfe manuell mit
java -versionin einer neuen Eingabeaufforderung.