自己动手提取jdk

为什么官方没有提供绿色解压版jdk?

windows平台下的java开发者可能会注意到现象,安装windows版本的jdk时得一步步点下一步,同进java开发者大都在linux系统上部署过tomcat或安装过jdk,从Oracle官网上下载一个tar压缩包,解压后配置一下环境变量就OK了,而windows系统下的安装顺带安装了jre和自动更新程序,说好的只安装jdk呢?

只安装了jdk?不存在的

windows平台下安装jdk比较方便,双击一个exe文件即可,细心的使用者可能会注意到在安装jdk的过程中Oracle也会诱导用户安装一个jre和一个自动更新程序(jre的位置和jdk并列,自动更新程序可以从控制面板的“程序和功能”列表里看到),其实作为一个java开发人员,单独安装一个jre是没有必要的,因为jdk里面已经自带一个jre了。

而安装一个安装版的jdk,所做的工作如下:

  • 双击安装jdk,过程中安装一个jre
  • 配置环境变量JAVA_HOME PATH
  • 配置CLASSPATH,其实这步是没必要的,我的机器上一直没有配置过,也没出过什么问题
  • win+r,输入cmd,回车,再输入 java 回车,显示java的用法则安装成功,网上的教程都说使用java -version,我只是感觉输入的太多了。

其实还不止这些,安装之后……

  • 还会在你的C:\ProgramData\Oracle目录下新建文件夹Java和其下的,里面有个文件夹叫javapath(它的图标是快捷方式图标,但它其实就是个文件夹!!!),所有以javapath开头的文件夹中都有java.exe、javaw.exe、javaws.exe。(我之前遇到过一个问题是eclipse打不开,就是因为eclipse找的javaw.exe就是这个文件夹下的,强制把eclipse的配置指向真正的位置才正常)
  • 最烦的人是,会生成一个升级程序!它在C:\Program Files (x86)\Common Files\Java\Java Update目录下。

其实作为一个java开发,我只要配置了JAVA_HOME,能使用java命令就可以说环境搭建成功了。而看windows版的jdk是多么地不老实,真不像linux版本的那样好。

绿色软件 VS 安装包

在windows平台下,很多人都喜欢使用绿色软件,因为解压即用,多一步的话就是再点击一下某个bat文件就好了。而安装一款软件其实无非是把一些文件放到对应的目录下。jdk也不会例外,其实把你安装的jdk目录打包发给另一个人也是可以用的(我只试过windows7对应windows7,win10对win10没测试过)。绿色软件的另外一个特点是以最小的体积实现最大的功能,常见的例子就是各个精简版的PhotoShop,我之前用过一个20M的ps8,它能满足我的日常需要,因而我就没有必要安装那个上G的原版安装包了。

自己动手提取jdk

问题很清晰了,我们就是想要一个绿色版的jdk,在网上一搜一大把,但又一个问题来了,我还怕网上下载的jdk有病毒呢。或者有人会问,他们是怎么提取到绿色版的jdk的呢。归根结底还是同一个问题——怎么自己提取jdk。

我们可以从Oracle的官网下载出一个windows安装包,此处我使用的是jdk-8u121-x64的。

接下来就要提取了,我们得使用一个神器7-zip,对,它本身就是个压缩解压软件,但它比WinRAR多了一个小小的功能——它可以解压非压缩包文件! 步骤如下,请一步步跟着操作:

  • 安装7-zip
  • 右键jdk安装包,点击“提取到"jdk-8u121-windows-x64/"”,会在当前目录下生成一个和安装包同名的文件夹
  • 进入.rsrc/1033文件夹,会看到JAVA_CAB开头的几个文件夹,如下:
  • JAVA_CAB7里面的文件用7-zip打开(右键文件点“解压到当前位置”即可,下同)后会看到jre.exe文件,这个文件我们不需要,因为我们要提取jdk。
  • JAVA_CAB9里面的是src.zip,即jdk中java类的源码。
  • JAVA_CAB10里面的是tools.zip,打开它后会发现和JDK安装目录相同的目录和文件,其实它就是JAVA_HOME,把tools.zip解压后复制到一个文件夹如(c:/jdk8)下即可,以后这个c:/jdk8就是JAVA_HOME了,再把上一步的src.zip文件解压出来放在c:/jdk8目录下,注意不要把src.zip解压了。
  • JAVA_CAB11里面是一个COPYRIGHT文件,可忽略不管。
  • (感觉,我为什么说感觉)提取好了,然后试下java命令。进入到c:/jdk8/bin目录下,运行cmd,输入java -version,遗憾的是

    Error occurred during initialization of VM

    java/lang/NoClassDefFoundError: java/lang/Object

说没找到java.lang.Object导致JVM初始化失败。我一开始就卡到这里了。

在网上忽然找到了一个页面http://blog.csdn.net/x_iya/article/details/78305917,博客的最后面提到了另外一个纯英文的网站https://bgasparotto.com/convert-jdk-exe-zip/。在这一步只需要执行一个命令就可以解决上面的错误信息,该命令是

for /r %x in (*.pack) do .\bin\unpack200 -r "%x" "%~dx%~px%~nx.jar"

请在c:/jdk8目录下使用此命令。再云bin目录下执行java -version,会发现正常了。然后配置一下JAVA_HOME,就ok了。

附属说明

  • 我用jdk-8u121测试的,在把pack文件转换成jar文件之前时的rt.pack只有15.8M,转换成rt.jar后却变成了60.4M,真是惊人!

  • https://bgasparotto.com/extract-src-zip-jdk-installer/这个页面也说了怎么提取出src.zip,其实直接从JAVA_CAB9解压出来是最省事的。其实提取jdk还有一种方式就是文件所提到的先双击运行jdk安装包,这时候什么也别点,去%USERPROFILE%\AppData\LocalLow\Oracle\Java\jdk1.8.0_121_x64目录下(请直接复制粘贴到地址栏并按回车即可),会看到几个cab文件,其实和用7-zip解压出来的一样。那个页面上说当你安装成功之后%USERPROFILE%\AppData\LocalLow\Oracle\Java\jdk1.8.0_121_x64目录下的cab文件会消失,我在windows7 SP1上测试发现安装成功后发现文件并没有消失……,附上一张图: cab文件未消失

  • 请试着在百度和谷歌里分别搜索 windows jdk 提取绿色版以体验其匹配结果……

猜你喜欢

转载自my.oschina.net/valuetodays/blog/1634843