由于Oracle官网只提供exe安装版的JDK,为了方便安装,我们需要将Oracle管网下载的JDK转换为免安装版本。另外我使用Scoop(类似于yum、apt-get)来管理Windows上的软件包,Scoop提供的Java版本不一定是我想要的,所以可以定制一个软件包。
Scoop使用bucket来管理软件包,一个bucket中可以包含多个json文件,这些json文件描述了如何安装一个软件,可以通过配置文件添加自己的软件。
方法一:
按照步骤常规安装,安装完毕后,打包备份安装目录下的文件,最后卸载,这样就可以获得一份免安装的JDK了。好处是简单,坏处是如果更换版本还需要重新安装卸载一遍,很不不方便。
方法二:
直接从安装包提取。
需要工具:7-Zip
- 新建一个文件夹,如“jdk-archive”,然后将JDK安装包移动到这个目录下,目的是用于放置提取文件,避免提取后的文件零散混乱;
- 在JDK安装包上点击右键,
7-Zip > 提取到当前位置
; - 进入到
.rsrc\1033
目录下,可以看到有四个以"JAVA_CAB"开头的文件夹,这些文件夹中存放的文件还需要进一步的提取才能得到我们能用的文件,以下是这些文件的对应关系。
文件夹名称 | 文件说明 |
---|---|
JAVA_CAB7 | jre.exe 安装程序 |
JAVA_CAB9 | src.zip 源代码包 |
JAVA_CAB10 | tools.zip 我们需要的JDK |
JAVA_CAB11 | COPYRIGHT 版权声明文件 |
提取JDK
进入到JAVA_CAB10
目录下,按住Shift键,同时鼠标右击文件夹空白处,在弹出的右键菜单中选择“在此处打开PowerShell窗口(S)”输入命令extrac32 111
,然后就可以看到,在该目录下多出了一个名为“tools.zip”的压缩包,使用7-Zip提取到“tools\”
。
是不是很熟悉的目录结构,但是此时的JDK还不能使用,我们进入`tools\lib
、tools/jre/lib
目录下,你会发现存在“.pack”为后缀的文件,而我们需要的是“.jar”后缀的文件,比如我们熟悉的tools\lib\tools.jar
现在是tools\lib\tools.pack
,所以还需要对这些文件进行进一步的转换。
打开命令提示符,进入到tools\lib
目录下,输入下面的命令进行转换:
for /r %x in (*.pack) do ..\bin\unpack200 -r "%x" "%~dx%~px%~nx.jar"
提取JRE以及其他文件
参考提取JDK的步骤,对不同类型的文件使用不同的方法处理即可。
JDK已经自带了一个JRE了,所以没有必要单独提取。
添加到Scoop中
首先将提取好的JDk压缩打包,上传到文件服务器上(只要可以通过链接直接下载即可),在自建仓库中新建配置文件oraclejdk8.json
,url换成文件地址,hash默认为sha256,需要自己生成,如果不对的话是没有办法安装成功的,
{
"description": "Oracle JDK 8",
"homepage": "https://www.oracle.com/technetwork/java/javase/overview/index.html",
"version": "1.8.0_171",
"license": "https://java.com/otnlicense",
"architecture": {
"64bit": {
"url": "https://cdn.example.com/jdk1.8.0_171.portable.zip",
"hash": "316526B6ABFFD989C1D2E35259AC7F83A75DEDE9A196C512BB0464536C01DC3A"
}
},
"extract_dir": "jdk1.8.0_171",
"env_add_path": [
"bin",
"jre\\bin"
],
"env_set": {
"JAVA_HOME": "$dir",
"CLASSPATH": ".;%JAVA_HOME%\\lib;%JAVA_HOME%\\jre\\lib"
}
}
最后就可以通过scoop install oraclejdk8
自动安装JDK了。