編譯前準備
1. 下載openjdk邑狸。
2. 解壓源碼壓縮包歇竟,解壓后的目錄結構
3. 安裝jdk的依賴庫
(1)挥唠、如果系統(tǒng)中已經(jīng)安裝了jdk和ant,運行:sudo apt-get install build-essential gawk m4 libasound-devlibcups2-dev libxrender-dev xorg-dev xutils-dev x11proto-print-dev binutilslibmotif3 libmotif-dev .
(2)焕议、如果系統(tǒng)中還未安裝jdk和ant,運行:sudo apt-get install build-essential gawk m4 openjdk-7-jdklibasound-dev libcups2-dev libxrender-dev xorg-dev xutils-devx11proto-print-dev binutils libmotif3 libmotif-dev ant.
說明:安裝的jdk是作為編譯openjdk時的java環(huán)境的宝磨,因為openjdk中大部分代碼還是java的,所以需要一個啟動的jdk盅安,下載的啟動(bootstrap)jdk一定要在jdk6 update 14之后的版本唤锉。需要下載的ant版本必須大于或等于1.7.1.
4. 設置系統(tǒng)的環(huán)境變量,以滿足openjdk的編譯
sudo gedit /etc/bash.bashrc
在/etc/bash.bashrc中增加如下內(nèi)容:
#語言選項這個必須設置宽堆,否則編譯好后會出現(xiàn)一個hashtable的npe錯
export LANG=C
#設置bootstrap JDK的安裝路徑腌紧,必須設置
exportALT_BOOTDIR=/home/java/jdk/jdk1.7.0_45/
#運行自動下載依賴
export ALLOW_DOWNLOADS=true
#
export SKIP_COMPARE_IMAGES=true
#使用預編譯頭茸习,不加這個編譯會慢一些
export USE_PRECOMPILED_HEADER=true
#設置要編譯的內(nèi)容
exportBUILD_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
#編譯結果所存放的路徑
exportALT_OUTPUTDIR=/home/fengyu_daniel/fengyu/java/openjdk/
#必須設置
unset JAVA_HOME
unset CLASSPATH
正式編譯階段
1. 進入解壓后的openjdk源碼根目錄:cd /home/openJdk/openJdk/
2. 重定向日志信息籽慢,保留編譯期間的日志:make 2>&1 | tee $ALT_OUTPUTDIR/build.log
3. 檢查之前設置的環(huán)境變量是否正確:make sanity;如果環(huán)境變量設置正確,結果如圖:
4. 接下來進行編譯:make
說明:如果編譯的時候報錯了猫胁,尤其時關于langtools/make/build.xml的錯誤箱亿,可能是因為bootstrap jdk的版本的原因,可以換一個版本低于openjdk的版本弃秆。openJdk7的bug修復届惋。編譯期間出現(xiàn)一個時間的錯誤髓帽,這是openjdk7u40的一個bug,替換源碼目錄下的對應的幾個文件內(nèi)容就可以編譯了,見地址:http://hg.openjdk.java.net/jdk7u/jdk7u/jdk/rev/74a70385c21d#l11.1.編輯比較耗時脑豹,在我本人的筆記本上大約編譯鈴45分鐘郑藏。
5. 編譯成功的結果如圖:
檢測編譯結果
1. 結果路徑下的j2sdk-image目錄下的所有文件就是我們常見的jdk。
2. 進入目標路徑下的j2sdk-image目錄:java -version
如果編譯的jdk沒有錯誤瘩欺,那結果如圖: