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

问题描述 投票:12回答:8

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

你以前做过这个怎么样?

installer installation extract java
8个回答
3
投票

您可以执行一次安装,然后压缩放在\ Programs \ Java下的已安装内容。

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


8
投票

这是用于解压缩“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
投票

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


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

2
投票

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


1
投票

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


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

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)
© www.soinside.com 2019 - 2024. All rights reserved.