如何仅提取JDK安装程序的内容

我刚刚下载了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