1. 程式人生 > >openjdk8最新原始碼編譯及使用(ubuntu16.04)

openjdk8最新原始碼編譯及使用(ubuntu16.04)

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