Wenn man die Class-File-Version eines Jars herausfinden möchte, kann man das Jar entpacken und mit javap eine beliebige *.class-Datei aus dem entpackten Jar untersuchen. Um diesen Prozess zu beschleunigen, habe ich ein kleines Powershell-Skript geschrieben. Es funktioniert entweder mit der Windows-Powershell als auch mit der neuen Powershell-Core. Natürlich muss auch ein JDK installiert sein. Es werden alle Jars im aktuellen Verzeichnis untersucht.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# Dieses Skript muss in das Verzeichnis mit den Jars, die untersucht # werden sollen, hineinkopiert werden oder im Pfad verfügbar sein. # Die gefundenen Jars werden nacheinander in ein Temp-Verzeichnis # entpackt und die erste gefundene *.class-Datei # wird mit javap auf ihre Version überprüft. # Hier steht der Name des Temp-Verzeichnisses, # in das die Jars nacheinander entpackt werden $NAME_OF_TEMP_DIR = "Temp" $IS_POWERSHELL_CORE = $PSVersionTable::PSEdition -eq "Core" Write-Host $IS_POWERSHELL_CORE $javaVersions = @{ 46 = "Java 1.2" 47 = "Java 1.3" 48 = "Java 1.4" 49 = "Java 5" 50 = "Java 6" 51 = "Java 7" 52 = "Java 8" 53 = "Java 9" 54 = "Java 10" 55 = "Java 11" 56 = "Java 12" 57 = "Java 13" 58 = "Java 14" 59 = "Java 15" 60 = "Java 16" 61 = "Java 17" } function getAllClassFiles { param ( $path ) get-ChildItem -Path $path\* -Recurse -Include *.class } function getJavaVersion { param ( $classFile, $file ) Write-Host "Untersuche Jar" $file "-> Klasse" $classFile $versionString = (javap -v $classFile | Select-String -Pattern "major version").ToString() [int]($versionString.SubString($versionString.Length - 2)) } $jars = Get-ChildItem -Path .\* -Include *.jar $jarFiles = @{} foreach ($jar in $jars) { $file = $jar.Name if (-not $IS_POWERSHELL_CORE) { $fileTemp = $file + ".zip" Copy-Item $file $fileTemp Expand-Archive -Path $fileTemp -DestinationPath $NAME_OF_TEMP_DIR > $null } else { Expand-Archive -LiteralPath $file -DestinationPath $NAME_OF_TEMP_DIR > $null } $classFiles = getAllClassFiles $NAME_OF_TEMP_DIR if ($classFiles -is [System.IO.FileSystemInfo]) { $classFile = $classFiles.FullName } else { $classFile = $classFiles[0] } $jarFiles.add($file, $javaVersions[(getJavaVersion $classFile $file)]) Remove-Item -Force -Recurse $NAME_OF_TEMP_DIR if (-not $IS_POWERSHELL_CORE) { Remove-Item -Force $fileTemp } } $jarFiles | Format-Table -AutoSize |