一个场景需要用到较低版本JVM(最终选择的是Java 6)。Oracle没有提供JDK6的安装包,Apple提供了JDK6的安装器,但是不想以Framework的形式安装(洁癖? orn),所以想着解包自己放到自定义目录。

文中参考链接可以下到Apple包装的JDK 1.6.0_65,以下是解包步骤。

解包步骤

1. 挂载dmg镜像

2. 创建个目录用来存放解包之后的文件

mkdir pkg && cd pkg

3. 解包

xar -xf /Volumes/Java\ for\ OS\ X\ 2015-001/JavaForOSX.pkg

得到一个文件和四个目录,需要关注的是JavaForOSX.pkg这个目录

Distribution
JavaEssentials.pkg
JavaForOSX.pkg
JavaMDNS.pkg
Resources

4. 获得需要的资源

解包Payload文件

tar zxvf JavaForOSX.pkg/Payload\ Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents \
    -C ./

在当前目录生成资源文件目录结构是Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents,Contents包含的内容就是JAVA_HOME,

# 执行拷贝
cp -R Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents ${LOCAL}/jdk6

之后就可以得到JDK6

5. 环境变量

配置环境变量的时候需要将JAVA_6_HOME指向${LOCAL}/jdk6/Home目录

% java -version
java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-468)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-468, mixed mode)

by the way

无意中发现一款app SuspiciousPackage可以把这些个步骤可视化。
打开app ›『File』› 『Open』› 选中镜像中的JavaForOSX.pkg › 选中 All Filestab浏览文件 › 选中Contents ›『File』› 『Export “Contents”』

最后两步导出动作可由快捷键 『Shift+Commond+E』触发


参考链接

Apple JDK
维基百科 Xar存档
Stack Overflow how-to-unpack-and-pack-pkg-file SuspiciousPackage