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

时间:2010-02-04 23:09:09

标签: installer installation extract java

我刚刚下载了Java SDK / JDK版本5和6,我只需要安装包中包含的开发工具(和一些库),我不需要执行安装,这就是为什么我只是在寻找首先是一个zip包(对于Windows只有一个exe安装文件),我只需要提取安装包的内容,我想这可以从命令行完成,但到目前为止我还没有找到如何这样做(我已经考虑过WinRar和7-Zip,但我真的很想找到不使用这些工具的方法)

你以前做过这个以及怎么做?

9 个答案:

答案 0 :(得分:8)

这里有用于解包的.bat脚本" pack"文件。必须在解压缩的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

答案 1 :(得分:7)

我使用7-zip来做到这一点。它似乎很好地处理了安装程序/自解压可执行文件。

答案 2 :(得分:4)

我已经创建了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

答案 3 :(得分:3)

您可以进行一次安装,然后压缩位于\ Programs \ Java下的已安装内容。

这可以在以后的其他地方解压缩并在大多数IDE中用作JDK而无需完全重新安装(但Windows不知道它)

答案 4 :(得分:2)

您可以使用Universal Extractor(非常棒的工具)从.exe文件中提取JDK 1.5和1.6。但是不要忘记将所有* .pack文件(使用Pack200格式压缩)转换为相应的* .jar文件,以获得完整的工作环境。您可以使用JDK本身提供的unpack200.exe命令。

答案 5 :(得分:1)

也许你可以试试Universal Extractor。该网站看起来合法,但我自己没有尝试过。

答案 6 :(得分:1)

这是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

答案 7 :(得分:0)

聚会晚点

这是用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)

答案 8 :(得分:0)

在它被 7zip 解压缩的文件夹中,与具有 bin 和 lib 文件夹的文件夹相同,下面的命令在 Windows 中执行“魔术”,当然。谢谢。

for /f %f in ('dir /s/b *.pack') do bin\unpack200.exe %~pf%~nxf %~pf%~nf.jar