1.4jdk只用那個版本的ant_java編譯jdk原始碼
阿新 • • 發佈:2021-01-31
技術標籤: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分鐘: