編譯openjdk
1. 下載openjdk原始碼
openjdk的官網是OpenJDK (java.net)
在網站左側就能看到它的原始碼位置的連結
從圖上可以看到,它的原始碼在兩個位置有託管,Mercurial、GitHub這兩個網站都有。我們點選GitHub,進去到它GitHub的位置。
上圖第一個就是openjdk的倉庫地址了 。
選擇HTTPS,複製地址。
下一步,登入碼雲(沒賬號的可以先建立一個),在邊上有個+的圖示,點開就可以看到二級選單有個從GitHub/GitLab匯入倉庫。
上面Git倉庫URL,填入從GitHub複製的地址,https://github.com/openjdk/jdk.git ,倉庫名字可以自己寫一個。完了之後點選匯入,就可以將openjdk的原始碼匯入到碼雲上來,匯入後和GitHub就都是一樣的。
選擇匯入GitHub倉庫的話,可以關聯自己的GitHub賬號,把自己GitHub的倉庫也匯入過來。
最後,我們就可以從碼雲上下載openjdk的原始碼了,再也不是龜速了。我本地下載6MB/s,不到1分鐘就下載完成了。
我本次選的是jdk-11+25這個分支。
我本地下載下來的是openjdk-jdk-11+25.zip
2. 環境準備
- 需要一個linux(windows也可以,不過好像比較麻煩,我沒試過。我本次是用Linux)環境。我是虛擬機器安裝的CentOS7。具體的版本號如下圖
-
根據阿里雲設定下軟體映象源。centos映象-centos下載地址-centos安裝教程-阿里巴巴開源映象站 (aliyun.com)
-
在環境中安裝jdk並設定環境變數(不用解除安裝系統自帶的JDK,直接可以使用壓縮版的jdk解壓後,設定相關的環境變數就可以)。
vim ~/.bashrc #在~/.bashrc中新增下面java環境變數 JAVA_HOME=/root/openjdk/jdk-11.0.10 #java目錄 CLASSPATH=$JAVA_HOME/lib PATH=$JAVA_HOME/bin:$PATH export PATH JAVA_HOME CLASSPATH source ~/.bashrc #使環境變數生效
jdk的版本不能小於要編譯的jdk版本-1,這個在編譯指導中有寫,具體自己看吧。
我本次使用的是jdk11,具體的版本號是如下圖。
4.將下載的openjdk的原始碼的壓縮包(我本次的壓縮包是openjdk-jdk-11+25.zip)上傳到CentOS7伺服器上,後續所有的工作就都在CentOS7上執行了。
到這裡,所有的準備工作就完成了,下一步就開始編譯openjdk了。
3. 編譯openjdk
-
首先在shell中輸入
java -version
,確實當前預設的java就是我們自己安裝的。 -
解壓上傳的openjdk原始碼壓縮包。
yum install zip unzip #安裝解壓縮軟體 unzip openjdk-jdk-11+25.zip #解壓openjdk原始碼包
-
原始碼包中有個README,開啟可以看到編譯的幫助文件是在doc目錄下的building檔案。上面2.3中的需要的jdk的版本也是在這個building的幫助文件裡。
-
編譯openjdk使用make來完成的,所以需要先安裝make(很多伺服器都是自帶make的,如果自帶了,那就不用再安裝了.)。
yum install make #安裝make,我本次用的CentOS就自帶了
-
下一步就是根據building中的指導來編譯了。
bash ./configure --help
這個命令可以來檢視各種編譯選項。bash ./configure --with-debug-level=slowdebug --with-target-bits=64 make
我本次就是使用上面兩行命令來編譯的。
編譯過程中需要的軟體也不必提前安裝,安裝過程中如果發現缺軟體,會有提示。如下圖,根據提示安裝相關軟體就可以了。
下面就是我本地實際安裝的軟體了。都是根據錯誤提示安裝的。
sudo yum install libXtst-devel libXt-devel libXrender-devel libXi-devel sudo yum install cups-devel sudo yum install fontconfig-devel sudo yum install alsa-lib-devel
configuration成功的話,會有如下圖
make成功的話會有如下圖
-
如果編譯成功,會在build/linux-x86_64-normal-server-slowdebug/jdk這個目錄下生成我們編譯的openjdk。
執行如下命令,驗證我們的編譯結果。
cd build/linux-x86_64-normal-server-slowdebug/jdk cd bin ./java -version
到這裡,整個openjdk的編譯就結束了。