CentOS7 編譯 JDK17
引言
最近看《深入理解JAVA虛擬機(jī)》,決定實(shí)操下編譯 OpenJDK桥状。
目前 LTS 版本是17,選擇的 OpenJDK 版本為 17。
準(zhǔn)備
- 操作系統(tǒng)
- JDK16(BI携兵,可執(zhí)行程序,作為Bootrap JDK)
- JDK17 源碼
實(shí)操
操作系統(tǒng)
通過cat /etc/redhat-release
搂誉, 查看系統(tǒng)是CentOS Linux release 7.7.1908 (Core)
卸載系統(tǒng)存在的JDK(可選)
安裝 JDK 16
在 Archived OpenJDK General-Availability Releases 上可以查找需要的 JDK 徐紧。
# 下載
cd /opt
wget https://download.java.net/java/GA/jdk16/7863447f0ab643c585b9bdebf67c69db/36/GPL/openjdk-16_linux-x64_bin.tar.gz
# 查看
ls -al
# 解壓
tar -zxvf openjdk-16_linux-x64_bin.tar.gz
# 查看版本(配置環(huán)境變量前)
./jdk-16/bin/java -version
# openjdk version "16" 2021-03-16
# OpenJDK Runtime Environment (build 16+36-2231)
# OpenJDK 64-Bit Server VM (build 16+36-2231, mixed mode, sharing)
# 配置環(huán)境變量
vim /etc/profile
# 在最后追加以下2行,因?yàn)閖dk-16有連接符炭懊,所以被雙引號(hào)引起來
export JAVA_HOME="/opt/jdk-16"
export PATH=$PATH:${JAVA_HOME}/bin
# 讓設(shè)置的環(huán)境變量生效
source /etc/profile
# 檢查
java -version
# openjdk version "16" 2021-03-16
# OpenJDK Runtime Environment (build 16+36-2231)
# OpenJDK 64-Bit Server VM (build 16+36-2231, mixed mode, sharing)
# 自此并级,JDK16 成為了系統(tǒng)默認(rèn)的 java 版本
-
下載 OpenJDK17 源碼
有2種方式:hg下載源碼,離線壓縮包(推薦)
wget https://download.java.net/openjdk/jdk17/ri/openjdk-17+35_src.zip unzip openjdk-17+35_src.zip # 如果 unzip 命令不存在嘲碧,使用 yum install -y unzip 安裝即可。
-
安裝編譯需要的依賴
yum groupinstall -y "Development Tools" #yum install -y libXtst-devel libXt-devel libXrender-devel libXrandr-devel 換成 yum install -y libX* # 否則報(bào)些莫名奇妙的錯(cuò)誤父阻,比如 error:Could not find fontconfig! yum install -y cups-devel freetype-devel alsa-lib-devel yum install -y libffi-devel
-
升級(jí)gcc的版本
查看源碼下的文檔
doc/building.html
)愈涩,gcc的最低版本是5.0,通過gcc --version
加矛,可以查看到系統(tǒng)默認(rèn)的是4.8.5履婉。參看 Linux安裝GCC流程詳解 來升級(jí)gcc的版本。# 安裝centos-release-scl yum -y install centos-release-scl # 安裝最新版本的GCC yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils scl enable devtoolset-9 bash # 修改環(huán)境變量 echo "source /opt/rh/devtoolset-9/enable" >> /etc/profile # 查看升級(jí)后的gcc版本 gcc --version # gcc (GCC) 9.3.1 20200408 (Red Hat 9.3.1-2)
-
編譯
# 賦予可執(zhí)行權(quán)限 chmod +x configure # 有很多配置項(xiàng)斟览,可以參看《深入理解JAVA虛擬機(jī)》毁腿,這里不說深入介紹。 ./configure # 多次編譯苛茂,清除之前的數(shù)據(jù) make clean # 編譯 make # 結(jié)果 # Finished building target 'default (exploded-image)' in configuration 'linux-x86_64-server-release'
驗(yàn)證
vim JVMTest.java
public class JvmTest {
public static void main(String[] args) {
System.out.println(System.getProperty("java.version"));
}
}
使用官方的 JDK16 編譯運(yùn)行
javac JVMTest.java
java JVMTest
結(jié)果 16
使用剛剛編譯好的 OpenJDK17 編譯運(yùn)行
./openjdk/build/linux-x86_64-server-release/jdk/bin/javac JVMTest.java
./openjdk/build/linux-x86_64-server-release/jdk/bin/java JVMTest
結(jié)果 17-internal