从零开始的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