OpenJDK 專案將 JDK 開源,讓開發者能深入核心優化、實驗新特性。本文記錄從 Ubuntu 7.10 起步,下載源碼、解決依賴、跑通 make sanity、最終產出可運行 java -version 的完整過程,附帶踩坑避雷指南。
| 項目 | 要求 |
|---|---|
| 作業系統 | Linux / Solaris / Windows XP/Vista(Mac OS X 不支援,需虛擬機) |
| Bootstrap JDK | JDK 6 最新版(JDK 7 無法用 JDK 5 編譯) |
| C 編譯器 | Linux: gcc 4.x;Windows: Visual Studio .NET;Solaris: Sun Studio 11 |
| 額外庫 | ALSA、Freetype、CUPS、X11、Xt、Xtst、Xi、Xext 開發套件 |
| 建構工具 | GNU Make 3.81+、Ant 1.6.3+、FindBugs 1.1+、gawk |
| Windows 限制 | 需 NTFS 檔案系統、安裝 Cygwin |
從 OpenJDK 官方下載頁 取得:
wget https://download.java.net/openjdk/jdk7/promoted/b23/openjdk-7-ea-src-b23-30_oct_2007.zip
wget https://download.java.net/openjdk/jdk7/promoted/b23/jdk-7-ea-plug-b23-linux-i586-30_oct_2007.jar
export ALT_BOOTDIR=/usr/local/java # Bootstrap JDK 6 路徑
export ALT_BINARY_PLUGS_PATH=~/plugs # Binary Plugs 解壓目錄
export ANT_HOME=/usr/share/ant
export FINDBUGS_HOME=/opt/java/findbugs-1.3.0
export ALT_JDK_IMPORT_PATH=/usr/local/java # 供 CORBA/JAXP/JAXWS 導入
export LANG=C # 避免 UTF-8 locale 導致建構腳本錯誤
chmod +x ./jdk/make/jdk_generic_profile.sh
./jdk/make/jdk_generic_profile.sh
cd control/make
make sanity
make sanity 會檢測缺失工具/庫/環境變數。**預期會報錯**,逐項安裝缺失套件:
gawk、ant、findbugs、libasound2-dev (ALSA)libcupsys2-dev (CUPS)libfreetype6-dev (Freetype)libx11-dev、libxt-dev、libxtst-dev、libxi-dev、libxext-dev (X11 族群)Ubuntu 使用 apt-get install 逐項搞定。FindBugs 需手動下載解壓並設定 FINDBUGS_HOME。
make
過程約 1-2 小時(視硬體)。常見中斷點與對策:
| 錯誤現象 | 原因 | 解決 |
|---|---|---|
Check_ALT_JDK_IMPORT_PATH/bin/javac: not found | 缺 ALT_JDK_IMPORT_PATH | 指向 Bootstrap JDK |
RemoteX86ThreadContext class not found | 源碼包損壞/解壓中斷 | 重新下載源碼包,覆蓋 hotspot/agent/... 目錄 |
libjsoundhs.so not found | Binary Plugs 未正確安裝 | 執行 java -jar jdk-7-ea-plug-*.jar(需圖形介面),解壓後更新 ALT_BINARY_PLUGS_PATH |
X11/Xlib.h: No such file | 缺 X11 開發頭文件 | apt-get install libx11-dev libxt-dev libxext-dev |
/usr/bin/ld: cannot find -lXtst | 缺 Xtst 庫 | apt-get install libxtst-dev |
編譯產物位於 openjdk/control/build/linux-i586/j2sdk-image/。
sudo cp -R j2sdk-image /opt/java/jdk1.7.0-internal
export JAVA_HOME=/opt/java/jdk1.7.0-internal
export PATH=$JAVA_HOME/bin:$PATH
java -version
# openjdk version "1.7.0-internal"
# OpenJDK Runtime Environment (build 1.7.0-internal-...)
# OpenJDK Client VM (build 12.0-b01, mixed mode)
openjdk/jdk/make/netbeans,打開即可建構除錯,適合視覺化開發習慣者。sudo apt-get install openjdk-6-jdk gawk ant findbugs libasound2-dev libcupsys2-dev \
libfreetype6-dev libx11-dev libxt-dev libxtst-dev libxi-dev libxext-dev
# 手動安裝 FindBugs 並設定 FINDBUGS_HOME
# 下載源碼包與 Binary Plugs,設定上述 6 個 export 變數
# 執行 jdk_generic_profile.sh → cd control/make → make sanity → make
首次建構約耗時半天,熟悉後可壓縮至數小時。親手編譯 OpenJDK 不僅能驗證修改、貢獻補丁,更能深度理解 JVM 启動流程、HotSpot 編譯器、類庫架構。建議從修復警告(如 Javadoc 標籤、varargs 呼叫)開始貢獻社群。