首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

從原始碼構建 OpenJDK 7:完整環境配置與編譯實戰紀實

     編輯:Java 相關知識

前言:親手編譯 JDK,探索 JVM 內核

OpenJDK 專案將 JDK 開源,讓開發者能深入核心優化、實驗新特性。本文記錄從 Ubuntu 7.10 起步,下載源碼、解決依賴、跑通 make sanity、最終產出可運行 java -version 的完整過程,附帶踩坑避雷指南。

系統需求清單

項目要求
作業系統Linux / Solaris / Windows XP/Vista(Mac OS X 不支援,需虛擬機)
Bootstrap JDKJDK 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 官方下載頁 取得:

  • OpenJDK 源碼包(~81 MB,含 95% 核心代碼)
  • Binary Plugs JAR(Sun 不擁有版權的閉源二進制段,平台專用)
  • (可選)Jtreg 測試框架、模組系統專案
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 導致建構腳本錯誤

生成 Makefile 並完整性檢查

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 foundBinary 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)

更簡單的替代方案

  • 預編譯二進制包: JDK 7 二進制快照頁 下載即用,適合不想折騰建構系統的開發者。
  • NetBeans IDE: 官方提供預配置 NetBeans 專案 openjdk/jdk/make/netbeans,打開即可建構除錯,適合視覺化開發習慣者。

一鍵環境備忘錄(Ubuntu 7.10 基準)

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 呼叫)開始貢獻社群。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved