从零开始的JDK编译
首先从获取JDK
源码开始。以OpenJDK
为例,点击 OpenJDK 进入,选择对应的JDK
版本,在此以JDK12
为例,选择 $jdk12$ 。进入后在左侧选择 $browse$ ,然后再选择 $zip$ 即可下载。源码下载完毕之后解压,可以在解压后的文件目录下的 $/doc/building.html$ 中阅读编译文档。
源码下载完毕之后开始准备Linux
环境,要注意在Linux
环境中,文件夹请尽量使用英文名,名称中不要出现空格。我使用的是WSL Ubuntu
,在刚开始使用时要记得切换镜像源。
vi /etc/apt/sources.list
使用 $vi$ 打开配置文件,然后替换为镜像源,在此我使用的是阿里云的镜像源,$sources.list$ 文件内容如下:
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
替换完毕后执行更新命令:
sudo apt-get update
sudo apt-get upgrade
然后就可以开始构建编译环境了:
sudo apt-get install build-essential #GCC
sudo apt-get install zip unzip #ZIP UNZIP
sudo apt-get install libfreetype6-dev #FreeType
sudo apt-get install libcups2-dev #CUPS
sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev #X11
sudo apt-get install libasound2-dev #ALSA
sudo apt-get install libffi-dev #libffi
sudo apt-get install autoconf #Autoconf
虽然我们要编译JDK
,但是仍然需要下载一份已经编译好的JDK
。如果要编译版本为 $N$ 的JDK
,那么至少需要一个版本为 $N-1$ 的已编译好的JDK
。在这里我们要编译JDK12
,因此可以下载JDK11
进行编译。点击 jdk.java.net 进行下载,注意在此要下载Linux
版。下载完成后前往下载目录,输入:
tar -zxvf openjdk-11+28_linux-x64_bin.tar.gz
开始解压,解压完成会得到一个名为 $jdk-11$ 的文件夹,再输入
vi /etc/profile
在打开的文件中加入以下配置:
JAVA_HOME=$YOUR_POSITION/jdk-11 #将$YOUR_POSITION替换为当前文件路径,可以使用pwd进行查看
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME PATH
添加完成后输入
source /etc/profile
启用配置。启用后可以输入
java -version
进行确认。
在配置完编译环境后,开始编译。首先进入一开始下载好的JDK
源码文件夹。OpenJDK
提供了很多编译参数,可以通过输入参数来改变编译配置,输入:
bash configure --help
命令可以查询到编译参数。以编译 $FastDebug$ 版、仅含 $Server$ 模式的HotSpot
虚拟机为例,输入:
bash configure --enable-debug --with-jvm-variants=server
$configure$ 命令会检查依赖项,当出现依赖项缺失时,会抛出异常,并且会给出安装命令。当抛出异常时,只需要根据其给出的安装命令安装即可。在检查完毕后,会输出配置信息,可以在 $/build$ 文件夹中新生成的文件夹内查看。之后就可以开始编译了,输入:
make images
即可开始。编译的过程很漫长,最终编译结束后会在之前 $/build$ 文件夹下配置文件夹中的 $/jdk$ 文件夹中生成JDK
。