我刚刚下载了Java SDK / JDK版本5和6,我只需要安装包中包含的开发工具(和一些库),我不需要执行安装,这就是为什么我只想找一个zip包起初(对于Windows只有一个exe安装文件),我只需要提取安装包的内容,我想这可以从命令行完成,但到目前为止我还没有找到如何做到这一点(我已经考虑过WinRar和7-Zip,但我真的想找到如何在不使用这些工具的情况下做到这一点)
你以前做过这个怎么样?
您可以执行一次安装,然后压缩放在\ Programs \ Java下的已安装内容。
这可以在以后的其他地方解压缩并在大多数IDE中用作JDK而无需完全重新安装(但Windows不知道它)
这是用于解压缩“pack”文件的.bat脚本。必须在解压缩的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
我使用7-zip来做到这一点。它似乎很好地处理安装程序/自解压可执行文件。
我创建了cygwin脚本来做到这一点: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
您可以使用Universal Extractor(非常棒的工具)从.exe文件中提取JDK 1.5和1.6。但是不要忘记将所有* .pack文件(使用Pack200格式压缩)转换为相应的* .jar文件,以获得完整的工作环境。您可以使用JDK本身提供的unpack200.exe命令。
也许你可以试试Universal Extractor。该网站看起来合法,但我自己没有尝试过。
这是e-egiazarov的脚本,经过修改后可以使用JDK存档中的unpack200.exe
,也可以在转换后删除包文件。
@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
派对有点晚了
这是一个用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)