最近在看JVM相关教程, 由于资源过于老旧,走了好多坑,这里记录一下自己的编译过程.
1. 准备
自己是在VirtualBox虚拟linux系统来操作的, 运行还是有点卡. 听过Docer运行会好一点,没试过,有兴趣的可以尝试. 另外还有在windows上折腾的,这个更加复杂, 资料也繁杂多了,这里只讨论最直接方便的方式
虚拟机: Oracle VM VirtualBox 5.0 (这个与编译源码没什么关系,能运行linux就行)
OS: CentOS 7.6 (与ubuntu相比, 主要的过程变化大,只是前期准备命令可能不一样)
源码: Openjdk8u
BootstrapJDK: openjdk7u
2. 资源链接
源码: https://github.com/yuexialiao08/openjdk8u
3. 相关说明
可以自行阅读源码里的reame.html. 这里结合其他人的经验说明一下, 源码的版本与linux的版本需要配合使用,不然可能出现一些坑.
bootstrapJDK需要比源码提前一个主要版本,比如源码是openjdk8,bootstrapJDk需要使用jdk7,这样可以避免编译时引入不必要的代码到JDK中.
4. 步骤
4.1 自己不知道先安装哪个,就直接./configure
然后里面会提示需要安装的包, 比如bootstrapJDk, ccache, freetype等
./configure 没有提示没问题后,继续下面的操作
4.2 make
有的资料显示先make sanity检查一下, 不过自己使用的源码里没有sanity这个脚本, 只能放弃这一步, 直接编译
在编译过程中,出现一些warning, error, 只要最后能够编译完成, 应该问题不大. 自己主要是想了解一个过程,没有深入研究出现的问题原因
4.3 检查编译结果
在源码目录下, cd build/xxx(.configure里配置的版本)/jdk/bin
java -version
javac -version
5 编译完成
----------------------------------------------------------------------------------------------------------
---------------------------------- 一些问题说明 ------------------------------------------------------
----------------------------------------------------------------------------------------------------------
1. source code下载
在source code下载的时候, 很多地方是直接在Openjdk的官方库下载的.
hg clone http://hg.openjdk.java.net/jdk8u/jdk8u jdk8u
cd jdk8u
bash ./get_source.sh
1.1 这里第一步没什么问题, 但是第三步get_source.sh脚本运行时,jdk, hotspot下载不了, 开始以为是网络问题, 翻墙后也不行. 自己使用浏览器访问clone的链接,发现可以正常打开,偏偏脚本运行时失败. 暂时不知道是什么原因. 放弃get_source.sh的方式(有大神知道的, 指点一下^^)
1.2 有人说可以在http://hg.openjdk.java.net/jdk8u/jdk8u/里找到下载的包zip,gz, 虽然通过browse浏览包没问题,但是下载的zip明显少了很多内容, 只有区区的1.5M大小,肯定不行.
1.3 在网盘上找到一个源码https://pan.baidu.com/s/1pLSMpAj , 不过使用中也是遇到了c++11语法问题, 一直没解决好
这里就涉及源码与操作系统的问题
对应操作环境
Ubuntu16.04
OpenJDK8.0源码
oraclejdk1.7.0.80
因为自己使用虚拟机安装ubuntu16时,一直闪屏, 所以这里的openjdk8.0与ubuntu16.04是否没问题就没验证过
1.4 通过github下载源码
幸好有人将源码copy到github这个最流行的库上, 直接在上面下载, 速度也还行. 源码已经是打包好的,不需要额外再拉内容.