专栏首页实战docker极简,利用Docker仅两行命令就能下载和编译OpenJDK11

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

通常情况下,编译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"命令多打印一行内容:

编译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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 极速体验编译openjdk8(docker环境)

    本文不讲解编译openjdk8的过程,而是专注于用最少的步骤把openjdk8源码编译构建成jdk。 进行本文的实践有个前提:请读者们先在电脑上安装docker...

    程序员欣宸
  • 让Jenkins执行GitHub上的pipeline脚本

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    程序员欣宸
  • Ubuntu环境下载OpenJDK11源码

    Ubuntu版本为16.04.5 LTS,在此环境下用官方推荐的方式下载OpenJDK11的源码,官方文档地址:https://hg.openjdk.java....

    程序员欣宸
  • Mac 查看端口占用状况

    week
  • 【带着canvas去流浪】 (3)绘制饼图

    使用原生canvasAPI绘制饼图(南丁格尔玫瑰)。(截图以及数据来自于百度Echarts官方示例库【查看示例链接】)。

    大史不说话
  • 「R」UCSCXenaShiny:基于 R 的 Xena 数据库交互应用

    项目地址:https://github.com/openbiox/UCSCXenaShiny[1]

    王诗翔呀
  • Serverless 初探

    点击领取新用户礼包-> 选择您最常用的编程语言,体验 Serverless Demo >>

    腾讯云serverless团队
  • 猛犸系统

    10.猛犸也支持通过分布式Shell引擎支持传统的服务器模式。并且资源模型和传统的服务器模式同时并存,解决各自擅长的问题

    用户2936994
  • 什么是后端开发?

    软件应用程序就像冰山一样。用户看到的只是应用程序的一部分——在大多数情况下——应用程序的最大部分是看不到的。这就是令人难以捉摸又神秘的“后端”。

    哲洛不闹
  • 使用HTTP 404-File Not Found的C2

    我们知道hack都会使用C2(命令和控制)控制受感染的主机系统.这些C2中的大多数都由大型僵尸网络控制,Hack只是简单地使用其中一些来访问系统,使他们...

    洛米唯熊

扫码关注云+社区

领取腾讯云代金券