openjdk8最新原始碼編譯及使用(ubuntu16.04)
阿新 • • 發佈:2019-01-02
1、準備環境
sudo apt-get install -y build-essential libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev libcups2-dev libfreetype6-dev libasound2-dev ccache gawk m4 openjdk-7-jdk libasound2-dev libxrender-dev xorg-dev xutils-dev binutils libmotif-dev ant
如果不能安裝的可以先去掉,保證其它模組安裝完成。
2、下載原始碼:
1)下載原始碼需要使用到hg安裝命令:
sudo apt-get install mercurial
官網下載最新原始碼(速度比較慢,需要幾小時不等):
hg clone http://hg.openjdk.java.net/jdk8u jdk8u
更新原始碼
cd jdk8u_x64_25.71-b00
## 執行許可權
sudo chmod 755 get_source.sh
## 更新
./get_source.sh
2)在csdn下載當前最新原始碼(推薦):
http://download.csdn.net/detail/love254443233/9915397
下載後目錄/資料夾重新命名為:jdk8u_x64_25.71-b00
3、編寫編譯指令碼build.sh(這是最快的方式)放在原始碼根目錄:
# 語言選項,這個必須設定,否則編譯好後會出現一個HashTable的NPE錯
export LANG=C
# Bootstrap JDK的安裝路徑。必須設定。 指向本地jdk的目錄。需要比當前版本低,如當前編譯版本是jdk8只能配置成jdk7
# jdk6/jdk7 的安裝可參考:http://blog.csdn.net/love254443233/article/details/8807600
export ALT_BOOTDIR=/opt/java/jdk1.7.0_79/
export ALT_JDK_IMPORT_PATH=/opt/java/jdk1.7.0_79/
# 允許自動下載依賴
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
# 要編譯的內容,如果想減少編譯時間,可以選擇性編譯,如把JAXP CORBA CORBA 這3項註釋掉
export BUILD_LANGTOOLS=true
export BUILD_JAXP=true
export BUILD_JAXWS=true
export BUILD_CORBA=true
export BUILD_HOTSPOT=true
export BUILD_JDK=true
export DISABLE_HOTSPOT_OS_VERSION_CHECK=ok
# 要編譯的版本
#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=./build/
#這兩個環境變數必須去掉,不然會有很詭異的事情發生(我沒有具體查過這些“”詭異的事情”,Makefile指令碼檢查到有這2個變數就會提示警告“)
unset JAVA_HOME
unset CLASSPATH
# 清理原來編譯的
make clean
make dist-clean
bash ./configure --with-target-bits=64 --with-debug-level=slowdebug --with-boot-jdk=/opt/java/jdk1.7.0_79/
#make sanity
make all ZIP_DEBUGINFO_FILES=0 2>&1 -d | tee build.log
##cd test && make PRODUCT_HOME=`pwd`/../build/*/images/j2sdk-image all
4、編譯
1)執行編譯指令碼:
cd jdk8u_x64_25.71-b00
./build.sh
若在編譯時提示缺少包,則使用提示中的命令安裝即可,如:
sudo apt-get install package_name
2)結果:
----- Build times -------
Start 2017-07-30 12:39:29
End 2017-07-30 13:18:32
00:03:53 corba
00:00:24 demos
00:02:30 docs
00:07:11 hotspot
00:02:17 images
00:03:26 jaxp
00:05:15 jaxws
00:13:05 jdk
00:00:37 langtools
00:00:24 nashorn
00:39:03 TOTAL
編譯好的檔案在放
jdk8u_x64_25.71-b00/build/linux-x86_64-normal-server-slowdebug
驗證
jdk8u_x64_25.71-b00/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -version
openjdk version "1.8.0-internal-debug"
OpenJDK Runtime Environment (build 1.8.0-internal-debug-lyh_2017_07_30_12_39-b00)
OpenJDK 64-Bit Server VM (build 25.71-b00-debug, mixed mode)
5、ide中使用編譯好的jdk,classpath新增如下2個路徑
jdk8u_x64_25.71-b00/build/linux-x86_64-normal-server-slowdebug/jdk/classes/
jdk8u_x64_25.71-b00/build/linux-x86_64-normal-server-slowdebug/jdk/classes_security/
ide中使用jdk的原始碼路徑
jdk8u_x64_25.71-b00/jdk/src/share/classes/
注:如果在ide中使用src.zip,除錯時會找不到部分package原始碼,如sun.misc.*
jdk8u_x64_25.71-b00/build/linux-x86_64-normal-server-slowdebug/images/src.zip