1. 程式人生 > 其它 >1.4jdk只用那個版本的ant_java編譯jdk原始碼

1.4jdk只用那個版本的ant_java編譯jdk原始碼

技術標籤:1.4jdk只用那個版本的ant

java編譯jdk原始碼

1. 編譯環境

測試環境:Ubuntu 16.04 LST

已安裝JDK:oracle 1.7.0_80-b15

編譯目標:openjdk 7u

2. 安裝依賴

sudo apt-get update
sudo apt-get install openjdk-7-jdk ccache make gcc g++ ca-certificates ca-certificates-java gawk libxext-dev libxrender-dev libxtst-dev libasound2-dev libcups2-dev libfreetype6-dev libcups2-dev

注意需要安裝ant 的1.9.x版本,1.10.x版本以上需要依賴JDK8,這裡編譯JDK7 必須安裝1.9.x

ant 官網:https://ant.apache.org/

ant-1.9.13的下載地址:

http://mirror.cc.columbia.edu/pub/software/apache//ant/binaries/apache-ant-1.9.13-bin.zip

3. 下載原始碼

# 安裝jdk的版本控制系統hg
sudo apt install mercurial
# 克隆專案
hg clone http://hg.openjdk.java.net/jdk7u/jdk7u
# 進入專案
cd jdk7u
# 下載原始碼
sh get_source.sh

4. 檢測環境是否搭建完畢

執行命令:

export LANG=C
unset JAVA_HOME
unset CLASSPATH

檢測當前環境是否成功:

make sanity

如果有sanity check passed代表成功!

5. 開始編譯

在openjdk 原始碼目錄建立make.sh檔案,檔案內容如下oracle jdk要根據不同機器進行更改,還有cpu核心數量,編譯結果存放路徑

需要修改自己的其中的ALT_BOOTDIR

#!/usr/bin/env bash
#語言選項,這個必須設定,否則編譯好後會出現一個HashTable的NPE錯
export LANG=C

#Bootstrap JDK的安裝路徑(就是已經安裝的JDK的位置)。必須設定 。
export ALT_BOOTDIR=/usr/jdk7

#允許自動下載依賴
export ALLOW_DOWNLOADS=true

#並行編譯的執行緒數,設定為和CPU核心數量一致即可
export HOTSPOT_BUILD_JOBS=4
export ALT_PARALLEL_COMPILE_JOBS=4

#比較本次build出來的映像與先前版本的差異。這個對我們來說沒有意義,必須設定為false,否則sanity檢查會報缺少先前版本JDK的映像。如果有設定dev或者DEV_ONLY=true的話這個不顯式設定也行。
export SKIP_COMPARE_IMAGES=true

#使用預編譯標頭檔案,不加這個編譯會更慢一些
export USE_PRECOMPILED_HEADER=true

#要編譯的內容
export BUILD_LANGTOOLS=true
#export BUILD_JAXP=false
#export BUILD_JAXWS=false
#export BUILD_CORBA=false
export BUILD_HOTSPOT=true
export BUILD_JDK=true

#要編譯的版本
#export SKIP_DEBUG_BUILD=false
#export SKIP_FASTDEBUG_BUILD=true
#export DEBUG_NAME=debug

#把它設定為false可以避開javaws和瀏覽器Java外掛之類的部分的build。
BUILD_DEPLOY=false

#把它設定為false就不會build出安裝包。因為安裝包裡有些奇怪的依賴,但即便不build出它也已經能得到完整的JDK映像,所以還是別build它好了。
BUILD_INSTALL=false

#編譯結果所存放的路徑
export ALT_OUTPUTDIR=/home/ice/jvm/build

#這兩個環境變數必須去掉,不然會有很詭異的事情發生(我沒有具體查過這些“”詭異的事情”,Makefile指令碼檢查到有這2個變數就會提示警告“)
unset JAVA_HOME
unset CLASSPATH

make 2>&1 | tee $ALT_OUTPUTDIR/build.log
sh make.sh

在筆者的電腦上用了17分鐘:

fa92f770041a0645f3d8da2560ac702b.png