文章目录
- 一、前期准备
- 1.安装OpenJDK12
- 2.下载前置工具
- 3.下载编译jdk12的jdk11
- 二、进行编译
- 1.编译前配置
- 2.开始编译
- 三、使用自己编译的JDK
- 1.进行全局配置
- 2.验证是否生效
注意:编译jdk很吃配置!!!所以一定要把虚拟机配置调高进行,我的虚拟机运行内存是8G,分配空间50G(后序编译文件占20G左右)
一、前期准备
1.安装OpenJDK12
官网地址:https://hg.openjdk.java.net/jdk/jdk12/
点击左侧栏browse,下载zip文件
解压到文件夹准备使用。
2.下载前置工具
sudo apt-get install build-essential
sudo apt-get install libfreetype6-dev
sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev
sudo apt-get install libasound2-dev
sudo apt-get install libffi-dev
sudo apt-get install autoconf
这一步一般不会出问题
3.下载编译jdk12的jdk11
编译jdk代码需要用到另一个编译期可用的JDK,根据n-1原则,编译JDK12时,必须使用JDK11及以后的版本
sudo apt-get install openjdk-11-jdk
下载完还是用java -version检测一下吧
二、进行编译
1.编译前配置
进入我们解压好的jdk12主目录
如果是多次编译,或者目录结构成功产生后又再次修改了配置,必须先使用“make clean”和“make dist-clean”命令清理目录(在jdk12的主目录执行就可以),后面的配置会在“bin/配置名称”下产生文件。
开始配置,在jdk12主目录进行以下指令
bash configure --disable-warning-as-errors --enable-debug --with-jvm-variants=server
注意,很多博客(包括周大神的《深入理解java虚拟机》)这里写的是“bash configure --enable-debug --with-jvm-variants=server”,但是在编译过程中会报char* _builtin_strncpy的错,原因是新版本gcc加入了stringup truncation的验证警告,需要禁止这个警告,而–disable-warning-as-errors的作用是“不要将本机警告视为错误”,加入此行设置后序即可正常编译。
此外,这里也许会报一些简单的配置错误,但提示会给出解决办法,这类问题跟着提示敲就行。
编译成功出现如下提示:
Tools summary:
* Boot JDK: java version "12.0.2" 2019-07-16 Java(TM) SE Runtime Environment (build 12.0.2+10) Java HotSpot(TM) 64-Bit Server VM (build 12.0.2+10, mixed mode, sharing) (at /Library/Java/JavaVirtualMachines/jdk-12.0.2.jdk/Contents/Home)
* Toolchain: clang (clang/LLVM from Xcode 11.4)
* C Compiler: Version 11.0.3 (at /usr/bin/clang)
* C++ Compiler: Version 11.0.3 (at /usr/bin/clang++)
Build performance summary:
* Cores to use: 8
* Memory limit: 16384 MB
2.开始编译
在jdk主目录进行以下指令
make images
"images"是"product-images"编译目标的简写别名,作用是编译出整个jdk镜像。
这一步是整个编译过程中最花时间的地方,我的虚拟机分配内存是8G,花了大概20多分钟编译完毕,弹出如下提示:
Creating jdk image
Creating CDS archive for jdk image
Stopping sjavac server
Finished building target 'images' in configuration 'macosx-x86_64-server-fastdebug'
编译到此就结束了,我们可以把自己编译的jdk路径复制到JAVA_HOME中,就可以作为一个完整的jdk使用。
三、使用自己编译的JDK
1.进行全局配置
sudo gedit ~/.bashrc
把以下命令复制到文档最底部
export JAVA_HOME=/home/yangyungang/Documents/jdk12/jdk12-06222165c35f/build/linux-x86_64-server-fastdebug/jdk
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export JRE_HOME=${JAVA_HOME}/jre
export PATH=${JAVA_HOME}/bin:$PATH
保存退出
2.验证是否生效
java -version
可以看到,我们的jdk版本变成了12了