极简,利用Docker仅两行命令就能下载和编译OpenJDK11

简介: 下载OpenJDK11源码再编译它,很麻烦吗?借助docker,这些操作会变得异常简单

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码): https://github.com/zq2599/blog_demos
  • 通常情况下,编译OpenJDK11源码构建新的JDK需要以下步骤:
  1. 下载OpenJDK11源码;
  2. 按自己需求修改OpenJDK11源码;
  3. 准备编译环境;
  4. 编译构建新的JDK;
  • 现在利用Docker,可以将步骤简化如下:
  1. 执行一行命令,完成OpenJDK11源码下载;
  2. 按自己需求修改OpenJDK11源码,这一步省不掉;
  3. 执行一行命令,将修改后的OpenJDK11源码构建为新的JDK;
  • 可见除了自己修改OpenJDK源码这一步因人而异无法省略,其余步骤已经被大大简化,接下来就一起体验一下吧;

实战环境

  1. 操作系统:Ubuntu 16.04.5 LTS;
  2. Docker:18.06.1-ce;
  3. 强烈建议您为Docker配置好镜像加速(例如阿里云和DaoCloud),因为用到的Docker镜像文件较大,使用镜像加速对下载速度提升明显;

实战步骤

  • 今天实战的内容如下:
  1. 用一行命令,通过Docker把OpenJDK11源码下载到本地;
  2. 按照自己的需求修改OpenJDK11源码;
  3. 用一行命令,通过DockerDocker编译构建OpenJDK11源码,生成新的JDK;
  4. 验证新的JDK;
  • 接下来开始实战吧;

准备工作

  • 在当前电脑准备一个空目录,例如我这里是/usr/local/work/openjdksrc,请确保该目录已经存在,且里面什么都没有;

下载OpenJDK11源码

  • 执行以下命令即可完成OpenJDK11源码下载:
docker run \
--rm \
-it \
-v /usr/local/work/openjdksrc:/output \
bolingcavalry/openjdksrc11:0.0.2
  • 注意:
  1. 命令中的/usr/local/work/openjdksrc就是之前新建的空文件夹;
  2. 由于源码包自身体积较大,因此下载镜像是比较耗时的,请您耐心等待;
  3. 命令执行成功后,/usr/local/work/openjdksrc下面会出现一个名为jdk11文件夹,这里面就是OpenJDK11的源码;

修改OpenJDK11源码

  • 接下来是您根据自己的需要去修改OpenJDK源码,举个例子,我修改的文件位于以下位置:
jdk11/src/java.base/share/classes/java/lang/VersionProps.java.template
  • 打开此文件,找到方法print(boolean err, boolean newln),该方法位于文件的尾部,在此方法的最后面添加一行代码,如下图红框所示,新增代码的作用是让"java -version"命令多打印一行内容:

image.png

编译OpenJDK11源码

  • 执行以下命令即可完成OpenJDK11源码编译和构建:
docker run --rm \
-it \
-v /usr/local/work/openjdksrc:/src \
bolingcavalry/buildopenjdk11:0.0.2
  • 编译构建的速度和电脑硬件有关,构建完成后,打开文件jdk11/build/linux-x86_64-normal-server-release/build.log,在文件尾部可以看到如下信息:
Creating support/modules_libs/jdk.security.auth/libjaas.so from 1 file(s)
Compiling 16 files for jdk.security.jgss
Compiling 8 files for jdk.unsupported.desktop
Compiling 94 files for jdk.xml.dom
Compiling 14 files for jdk.zipfs
Warning: No mercurial configuration present and no .src-rev
Compiling 4 files for BUILD_JIGSAW_TOOLS
----- Build times -------
Start 2018-10-26 03:19:45
End   2018-10-26 04:02:08

00:42:23 TOTAL
-------------------------
Finished building target 'default (exploded-image)' in configuration 'linux-x86_64-normal-server-release'

验证新的JDK

  • 进入目录jdk11/build/linux-x86_64-normal-server-release/jdk/bin
  • 执行命令./java -version,可以看到下图信息,红框中就是我们修改的效果:

image.png

  • 至此,OpenJDK11源码的下载、修改、编译就这么完成了,是不是很简单呢?如果您有兴趣了解如何做到这么简单的操作,请关注以下两篇文章,它们分别揭示了如何制作下载源码的镜像和编译源码的镜像:
  • 《制作Docker镜像,用来下载OpenJDK11源码》
  • 《制作Docker镜像,用来编译OpenJDK11源码》

欢迎关注阿里云开发者社区博客:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...
相关文章
|
3月前
|
Docker 容器
Docker run命令-p参数详解
本文介绍Docker端口映射的基础用法。通过`docker run -p <宿主机端口>:<容器端口>`实现端口映射,例如`-p 5000:80`将宿主机5000端口映射到容器80端口,外部访问宿主机5000端口时流量会转发至容器内部的80端口。示例命令中,`-d`用于后台运行,`--restart=always`确保容器自动重启,`--name`指定容器名称。部署完成后可通过`http://服务器IP地址:5000`验证服务是否正常运行。
|
4月前
|
网络协议 Ubuntu Docker
Docker Compose--命令说明
Docker Compose--命令说明
820 30
|
4月前
|
Ubuntu Linux 开发者
常用的Docker命令:docker_cmd_sheet
以上就是一些常用的Docker命令,希望能帮助你更好地驾驭这个强大的工具。记住,Docker就像是一个魔法咒语,只有真正理解和熟练使用,才能发挥出它的最大魔力。
122 22
|
4月前
|
Shell 应用服务中间件 nginx
docker 镜像的部分常用命令
docker镜像常用命令
162 16
|
4月前
|
关系型数据库 MySQL 数据库
Docker 安装常用软件相关命令
本文介绍了在CentOS 7.9系统上安装Docker的详细步骤,包括添加阿里云镜像源、安装Docker及相关组件、启动服务以及配置镜像加速。同时,还展示了如何通过Docker安装MySQL 5.7版本数据库,涵盖拉取镜像、创建数据目录、运行容器及配置挂载点等操作,并提供验证安装成功的命令和截图。适合需要部署Docker与MySQL环境的用户参考。
305 5
|
4月前
|
关系型数据库 MySQL Docker
|
5月前
|
NoSQL 应用服务中间件 Redis
Docker 常用命令整理
Docker 常用命令整理
152 1
|
6月前
|
开发工具 虚拟化 git
自学软硬件第755 docker容器虚拟化技术youtube视频下载工具
docker容器虚拟化技术有什么用?怎么使用?TubeTube 项目使用youtube视频下载工具
|
7月前
|
容器 Docker Ubuntu
Docker命令速查表​
本文翻译自我的英文博客,最新修订内容可随时参考:Docker命令速查表
113 9
|
6月前
|
Ubuntu Linux Docker
Docker 入门全攻略:安装、操作与常用命令指南
Docker 的世界非常广阔,这只是一个开始,请继续探索和学习 Docker 的高级特性和最佳实践。后续也会继续更新相关的理论与实践内容。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~