全网最新最简单的 OpenJDK13 代码编译
个人博客原文:全网最新最简单的 OpenJDK13 代码编译

最近因写文章需要查看 JVM 源码,有时代码逻辑不是很清晰,找半天,趁国庆假期,抽空下载了 OpenJDK13 搭建了 JVM debug 环境,把操作记录写在这篇文章里,让有需要的朋友可以参考,少踩坑。
我是在 Ubuntu 18.04 下编译的,不是在 Windows,建议不在 Windows 下折腾,会遇到比在 Linux 环境下多得多的问题。如果你电脑也是 Windows,可以像我这样,安装个 VMware 虚拟机软件,在里面装个 Ubuntu 系统,在虚拟机里面玩,这 2 个软件在官网下载就行,当然如果懒得去找也可以在我的公众号后台回复: 虚拟机 获取 VMware 软件和 Ubuntu 18.04 镜像。
安装 Ubuntu 虚拟机就不在这篇文章说了,网上有相关的资料。
开始咯
1.下载源码
平时咱用的代码管理工具大多数是 Git,OpenJDK 并不是,而是用 Mercurial 管理工具,所以我们要安装它。通过下面命令安装。
sudo apt-get install mercurial
安装完代码管理工具后,我们就可以下载 OpenJDK13 的源码了,使用如下命令即可下载。这个过程根据网络状况,需要的时间不一,我下载花了十来分钟。
hg clone http://hg.openjdk.java.net/jdk/jdk13/
嗯,我就是这样干等了十来分钟,因为具体的官方操作文档也在里面,没下载下来无法看,网上也找不到相关的 Ubuntu 18 编译 OpenJDK13 的文章,所以不知道具体要安装哪些依赖。现在你看到这篇文章,可以不用干等着了,接下来步骤 2 和 3 不依赖源代码,可以继续操作。
2.安装编译需要的依赖
这一部分是查看了官方文档,做了总结,官方文档里面是按软件区分的,那样一个命令一个命令敲有点繁琐,就把它整合成一个命令,执行就完了,满足有些朋友想尽快编译完,少些多余的东西。
sudo apt-get install libfreetype6-dev libcups2-dev libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev libasound2-dev libffi-dev autoconf gcc clang libfontconfig1-dev
想了解这些依赖软件是干嘛用的,可以看看官方文档,文档的位置如下图。

3.安装 jdk 12
这个在文档里面称为 Boot JDK,就是编译时需要上一个版本的 JDK 做为基础,一般是使用 N-1 版本,比如编译 OpenJDK8 就使用 JDK7 作为 Boot JDK,我们这里是编译 OpenJDK13,所以使用的是 JDK12。也是执行下面命令就搞定。
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-12-jdk
安装完可以通过 java -version 来验证一下是否成功安装。见到如下结果就妥妥的。

执行完上面步骤,那么恭喜你,现在就可以开始编译了。
4.检查配置
我们安装了上面那么多东西,需要来检查一下是不是已经安装完所需要的软件,通过下面命令来检查。
bash configure
如果执行过程中有异常,就根据异常和提示信息,安装所缺的软件就行。如果看到下面的结果,那么再一次恭喜你,所有依赖软件都准备好了。

5.开始编译
最激动人心的时刻到来了,敲入下面的命令,开始编译吧。这个过程大概需要半个小时,耐心等候,可以稍作休息,喝杯 82 年的咖啡。
make images
见证奇迹的图片。看到下图说明编译成功啦。

6.验证是否成功
还需要再稳一点,验证编译后的 java 是否可用,通过下面的命令来验证。
./build/*/images/jdk/bin/java -version
看下图,出现 "13-internal" 2019-09-17 字样,我们编译出来的 JDK13 可以用啦。

这标题起得不过分吧,上面版本日期是 2019-09-17,还不到一个月,网上相关资料也没,就只有官方文档了(当然也是最好的资料)。跟着步骤走,不会丢,为了验证这句话,还把上面的步骤在我快退休的笔记本上跑了一遍,妥妥的。
回顾
我们这篇文章就讲了编译 OpenJDK13,接下来会再写一篇怎么搭建 Debug JVM 环境,可以关注公众号,期待下一篇。
推荐阅读
了解Java线程优先级,更要知道对应操作系统的优先级,不然会踩坑
后台回复『设计模式』可以获取《一故事一设计模式》电子书
觉得文章有用帮忙转发&点赞,多谢朋友们!

全网最新最简单的 OpenJDK13 代码编译的更多相关文章
- 简单了解Phar代码打包工具的使用
简单了解Phar代码打包工具的使用 Phar 是在 PHP5 之后提供的一种类似于将代码打包的工具.本质上是想依照 Java 的 Jar 文件那种形式的代码包,不过本身由于 PHP 是不编译的,所以这 ...
- 全网最新的nacos 2.1.0集群多节点部署教程
原文链接:全网最新的nacos 2.1.0集群多节点部署教程-语雀 基本信息 进度整理中 版本 2.1.0 版本发布日期 2022-04-29 git revision number b5845313 ...
- 利用Roslyn把C#代码编译到内存中并进行执行
Tugberk Ugurlu在其博文<Compiling C# Code Into Memory and Executing It with Roslyn>中给大家介绍了一种使用.NET下 ...
- 最简单的视频编码器:编译(libx264,libx265,libvpx)
===================================================== 最简单的视频编码器系列文章列表: 最简单的视频编码器:编译 最简单的视频编码器:基于libx ...
- 如何把iOS代码编译为Android应用
新闻 <iPhone 6/6 Plus中国销量曝光:单月销量650万>:据iSuppli Corp.中国研究总监王阳爆料,iPhone 6和iPhone 6 Plus在国内受欢迎的情况大大 ...
- Keil C减小代码编译量大小的方法(gai)
keil-C减小代码编译大小的方法整理 方法一:(通过优化代码减小) 1.1少做乘除运算,使用左/右移位来实现乘除 Eg ,普通:a = 0x80*4: 优化:a = 0x80<<2: 1 ...
- 洗礼灵魂,修炼python(3)--从一个简单的print代码揭露编码问题,运行原理和语法习惯
前期工作已经准备好后,可以打开IDE编辑器了,你可以选择python自带的IDLE,也可以选择第三方的,这里我使用pycharm--一个专门为python而生的IDE 按照惯例,第一个python代码 ...
- Unity 代码编译成dll 更新dll实现热更代码
Unity 代码编译成dll 更新dll实现热更代码 实现流程 代码编译成DLL DLL打包成AssetBundle 加载AssetBundle 加载代码程序集 获取指定类 使用反射赋值 C#代码编译 ...
- JVM原理(Java代码编译和执行的整个过程+JVM内存管理及垃圾回收机制)
转载注明出处: http://blog.csdn.net/cutesource/article/details/5904501 JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.e ...
随机推荐
- Gym 100851 题解
A: Adjustment Office 题意:在一个n*n的矩阵,每个格子的的价值为 (x+y), 现在有操作取一行的值,或者一列的值之后输出这个和, 并且把这些格子上的值归0. 题解:模拟, 分成 ...
- CF 987C Three displays DP或暴力 第十一题
Three displays time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- HDU 1015 Safecracker (DFS)
题意:给一个数字n(n<=12000000)和一个字符串s(s<=17),字符串的全是有大写字母组成,字母的大小按照字母表的顺序,比如(A=1,B=2,......Z=26),从该字符串中 ...
- Java面试-动态规划与组合数
最近在刷力扣上的题目,刷到了65不同路径,当初上大学的时候,曾在hihocoder上刷到过这道题目,但是现在已经几乎全忘光了,大概的知识点是动态规划,如今就让我们一起来回顾一下. 从题目说起 题目原文 ...
- Go语言获取系统性能数据gopsutil库
psutil是一个跨平台进程和系统监控的Python库,而gopsutil是其Go语言版本的实现.本文介绍了它的基本使用. Go语言部署简单.性能好的特点非常适合做一些诸如采集系统信息和监控的服务,本 ...
- asp.net core webapi 统一处理返回值、异常和请求参数验证
现在的开发模式很少用asp.net mvc一个项目直接操作界面和数据库了.大部分都使用前后端分离,更多的是为了让API支持移动端. 后端写webapi的时候必然需要和前端约定请求值和返回值的格式,如果 ...
- Python函数编程——闭包和装饰器
Python函数编程--闭包和装饰器 一.闭包 关于闭包,即函数定义和函数表达式位于另一个函数的函数体内(嵌套函数).而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量.参数.当其中一个 ...
- Spring Boot (二):模版引擎 Thymeleaf 渲染 Web 页面
Spring Boot (二):模版引擎 Thymeleaf 渲染 Web 页面 在<Spring Boot(一):快速开始>中介绍了如何使用 Spring Boot 构建一个工程,并且提 ...
- Unity3D_UGUI与NGUI的区别与优缺点
1. NGUI与UGUI的区别 1) UGUI的Canvas 有世界坐标和屏幕坐标; 2) UGUI的Image可以使用material; 3) UGUI通过Mask来裁剪,而NGUI通过Panel的 ...
- 【新】mybatis中大于等于小于等于的两种常用写法
mybatis中大于等于小于等于的写法 原符号 < <= > >= & ' " 替换符号 < <= > >= & &a ...