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

Ubuntu 16.04 編譯 OpenJDK 8 完整實戰指南:從源碼獲取到構建成功

     編輯:Java 綜合教學

前言

在 Ubuntu 16.04 上從源碼編譯 OpenJDK 8 是理解 JVM 內部機制、定製 JDK 或排查底層問題的重要技能。本文匯總官方文檔與實戰踩坑經驗,提供可直接落地的完整步驟。

一、源碼獲取

1. 安裝 Mercurial (hg)

sudo apt-get update
sudo apt-get install mercurial

2. 克隆官方倉庫

# 選擇版本標籤,如 jdk8u60
sudo hg clone https://hg.openjdk.java.net/jdk8u/jdk8u60 jdk8u60
cd jdk8u60

克隆完成後,目錄下會有 README-builds.html,強烈建議閱讀官方構建說明。

3. 獲取子模塊源碼

sudo sh get_source.sh

此步驟下載 hotspot、langtools、jaxp 等子倉庫,耗時較長,網絡不穩可重試。

二、構建依賴環境準備

執行 bash ./configure 會自動檢測依賴,缺什麼裝什麼。以下是常見必裝包:

1. Bootstrap JDK (OpenJDK 7)

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-7-jdk

注意:編譯 JDK 8 需要 JDK 7 作為引導編譯器。

2. X11 開發庫(圖形界面相關)

sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev

關鍵提示:包名中 x 為小寫,官方錯誤提示有時顯示大寫 LIBX11-DEV 導致誤裝。

3. 其他常見依賴

sudo apt-get install build-essential libfreetype6-dev libcups2-dev libfontconfig1-dev libasound2-dev

三、配置與編譯

1. 配置構建參數

bash ./configure \
  --with-boot-jdk=/usr/lib/jvm/java-7-openjdk-amd64 \
  --with-debug-level=slowdebug \
  --enable-debug-symbols \
  --with-target-bits=64
  • --with-boot-jdk:指定 Bootstrap JDK 路徑
  • --with-debug-level=slowdebug:包含調試符號,便於 GDB 調試
  • --enable-debug-symbols:生成調試信息

2. 開始編譯

sudo make all

編譯時間視 CPU 核心數而定,通常 30-120 分鐘。可用 make JOBS=<核心數> 並行加速。

3. 驗證構建產物

build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -version

輸出應包含 openjdk version "1.8.0_60-internal" 等信息。

常見錯誤與解決方案

錯誤現象原因解決辦法
configure: error: Could not find all X11 headers缺少 X11 開發庫安裝 libx11-dev 等包(注意小寫)
Bootstrap JDK version mismatchJDK 版本不匹配確保使用 OpenJDK 7,非 Oracle JDK 8
make 過程中網絡下載失敗需下載外部依賴預先下載或配置代理,重試 make
磁盤空間不足構建產物佔用 10GB+清理空間或掛載大分區

進階技巧

  • 增量編譯:修改 hotspot/corba 等模塊後,直接 make CONF=linux-x86_64-normal-server-slowdebug 增量構建
  • 生成安裝包:make bundle 生成 jdk-8u60-linux-x64.tar.gz
  • 交叉編譯:配置 --openjdk-target=arm-linux-gnueabihf 針對 ARM 平台

總結

通過本文步驟,你已在 Ubuntu 16.04 成功編譯 OpenJDK 8。建議保留構建目錄,後續可嘗試修改 GC 算法、添加 JVMTI 接口等定製化開發。編譯 JDK 不僅是技能,更是通往 JVM 核心世界的入場券。

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