安裝舊版 J2SDK 1.4.2(從 Oracle 歸檔下載),配置好環境變量後執行 java -version 報錯:
Error occurred during initialization of VM
java/lang/NoClassDefFoundError: java/lang/Object
檢查 $JAVA_HOME/lib 和 $JAVA_HOME/jre/lib 發現:
缺少 tools.jar 和 rt.jar,取而代之的是 tools.pack 和 rt.pack。
這是舊版 JDK 為減小體積採用的 Pack200 壓縮格式,首次使用需解包。
# 1. 進入 lib 目錄
cd /usr/java/j2sdk1.4.2/lib
# 2. 解包 tools.pack → tools.jar
unpack tools.pack tools.jar
# 3. 進入 jre/lib
cd ../jre/lib
# 4. 解包 rt.pack → rt.jar(使用上級目錄的 unpack)
../../unpack rt.pack rt.jar
# 檢查生成的 jar
ls -l /usr/java/j2sdk1.4.2/lib/tools.*
# -rw-r--r-- 1 root root 5092901 ... tools.jar
# -rw-r--r-- 1 root root 1743428 ... tools.pack
ls -l /usr/java/j2sdk1.4.2/jre/lib/rt.*
# -rw-r--r-- 1 root root 26782544 ... rt.jar
# -rw-r--r-- 1 root root 8684102 ... rt.pack
# 再次運行
java -version
# java version "1.4.2"
# Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-b28)
# Java HotSpot(TM) Client VM (build 1.4.2-b28, mixed mode)
rt.jar:Java 運行時核心類庫(含 java.lang.Object 等基礎類)tools.jar:編譯器、調試器等工具類unpack 為對應解壓工具jimage 格式,無此問題java -version 失敗,優先檢查 lib/rt.jar 是否存在記住:缺 rt.jar 必報 NoClassDefFoundError: java/lang/Object,解包即愈!