I just downloaded the Java SDK/JDK versions 5 and 6, and I just need the development tools (and some libraries) contained in the installation packages, I don't need to perform an installation and that's why I was only looking for a zip package at first (for Windows there is only an exe installation file), I only need to extract the contents of the installation packages, I think this can be done from the command line but so far I haven't found how to do this (I already considered WinRar and 7-Zip, but I really want to find how to do it without using these tools)
Have you done this before and how?
You can do the installation once and then zip up the installed stuff placed under \Programs\Java.
This can be unzipped elsewhere later and used as a JDK in most IDE's without needing a full reinstall (but then Windows does not know about it)
Here's .bat script for unpacking "pack" files. Must be run in the root of unzipped JDK.
@echo off
echo **********************
echo unpack JDK pack-files
echo **********************
pause
set JAVA_HOME=c:\glassfish4\jdk7
setlocal enableextensions
for /r %%f in (*) do call :process %%f
endlocal
goto :eof
:process
if NOT "%~x1" == ".pack" goto :eof
set FOLDER=%~p1
set PWD=%CD%
pushd %FOLDER%
echo Unpacking %~nx1
%JAVA_HOME%\bin\unpack200.exe %~nx1 %~n1.jar
popd
goto :eof
I use 7-zip to do that. It seems to handle that installer/self-extracting executables nicely.
I've created cygwin script to do that:
https://gist.github.com/4ndrew/f9dca61cedf0e8340b54
#!/bin/sh
# usage example: prepareJdk.sh jdk-7u67-windows-x64.exe (result will be in jdk/)
# Requires: p7zip, unzip
JDK_EXE=$1
7z x -ojdk "$JDK_EXE"
unzip jdk/tools.zip -d jdk/
find jdk/ -type f \( -name "*.exe" -o -name "*.dll" \) -exec chmod u+rwx {} \;
rm jdk/tools.zip
find jdk/ -type f -name "*.pack" | while read eachFile; do
echo "Unpacking $eachFile ...";
./jdk/bin/unpack200.exe $eachFile ${eachFile%.pack}.jar;
rm $eachFile;
done
You can extract both JDK 1.5 and 1.6 from .exe files, using the Universal Extractor (really a great tool). But don't forget to convert all *.pack files (compressed with Pack200 format) into corresponding *.jar files, in order to obtain a full working environment. You can use the unpack200.exe command provided in the JDK itself.
Maybe you can try Universal Extractor. The site looks legit, but I haven't tried it myself.
This is e-egiazarov's script, modified to use unpack200.exe
from the JDK archive and also to remove the pack file after conversion.
@echo off
setlocal enableextensions
for /r %%f in (*) do call :process %%f
endlocal
goto :eof
:process
if NOT "%~x1" == ".pack" goto :eof
set FOLDER=%~p1
set PWD=%CD%
pushd %FOLDER%
echo Unpacking %~nx1
%PWD%\bin\unpack200.exe %~nx1 %~n1.jar
del %~nx1
popd
goto :eof
a little late to the party
here's an extractor written in powershell
param($installdir)
$list=$(gci -Recurse ./$installdir/*.pack) | %{
return @{
source=$_.FullName
parent=$_.Directory.FullName
target="$($_.Directory.FullName)\$([io.path]::GetFileNameWithoutExtension($_.Name)).jar"
}
} | %{
$result = $(unpack200 $_.source $_.target)
$_result=$result
return $_
}
Write-Host $(ConvertTo-Json $list)