编译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的编译就结束了。