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