美文网首页
JAVA虚拟机(JVM)实战一:Docker容器环境下编译Ope

JAVA虚拟机(JVM)实战一:Docker容器环境下编译Ope

作者: IT前沿技术分享 | 来源:发表于2024-05-05 10:50 被阅读0次

JAVA虚拟机(JVM)系列:
JAVA虚拟机(JVM)一:了解JAVA体系结构
JAVA虚拟机(JVM)二:JVM工作原理
JAVA虚拟机(JVM)三:类加载器子系统
JAVA虚拟机(JVM)四:JMM(Java内存模型)
JAVA虚拟机(JVM)五:JVM执行引擎
……

JAVA虚拟机(JVM)实战一:Docker容器环境下编译OpenJDK11


前言

参考building文档,通常情况下,编译OpenJDK11源码构建新的JDK需要以下步骤:

  • 准备编译环境
  • 下载OpenJDK11源码
  • 按自己需求修改OpenJDK11源码;
  • 编译构建新的JDK;

一、Windows 准备

由于在Windows下,故直接用Docker 容器(刚好本地库有Ubuntu20.04镜像)作为基础环境。

另外,确保产物持久化,在Window宿主机下,创建openJDK源码目录( D:\soft\docker\openjdksrc ),再以数据盘方式挂载到容器内部。

powershell 创建源码目录
mkdir D:\soft\docker\openjdksrc; 

二、准备环境

执行以下docker命令,创建编译基础环境

docker run -it -v D:\soft\docker\openjdksrc:/home/openjdksrc  --name BuildOpenJDK11 Ubuntu:20.04

PS:

  1. -v A:B 参数,将宿主机的目录 A 映射到容器的目录 B
  2. 命令中的D:\soft\docker\openjdksrc就是之前创建好OpenJDK11源码的存放目录;

创建好容器后,一般是直接进入容器内部了,如果没有,则执行以下命令进入容器

docker exec  -it BuildOpenJDK11 /bin/bash

先安装Git

apt install -y git 

再安装OpenJDK11作为编译的引导版本

apt install -y openjdk-11-jdk

安装完毕后,查看版本


image.png

三、下载OpenJDK11源码

由于编译JDK 需要一个版本号至少为N - 1的JDK做引导,由上步可以看出,已发布的openjdk-11的小版本是 22;

为确保成功率,取最小版本差,故clone OpenJDK11 的小版本23作为编译对象;

git clone -branch  jdk-11+23 --single-branch  https://github.com/openjdk/jdk11.git

几分钟后,即可完成,完成后,目录下会多出一个jdk11的源码目录。

PS:为什么没有按照文档里的 hg clone下载,因为Git用习惯了,比较熟悉,而且用Git从github上下载,应该快不少。

四、按需调整OpenJDK11源码

接下来是您根据自己的需要去修改OpenJDK源码,我这里只作个简单的修改,目标是 打印java版本(Java -version)时,多打印一句"Build By Yufenfen!"

目标文件位于以下位置:

jdk11/src/java.base/share/classes/java/lang/VersionProps.java.template

Notepad++ 打开此文件,拉倒文件的尾部,在方法 private static void print(boolean err, boolean newln) 的最后面添加一行代码

ps.println("Build By Yufenfen!");
image.png

保存退出文件。

四、编译JDK11

安装相关依赖

由于在编译过程中,会提示各种依赖缺失,故预先安装相关依赖

apt install -y  build-essential libfreetype6-dev libcups2-dev libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev libasound2-dev libffi-dev libfontconfig1-dev autoconf
apt install -y  file  diffutils pigz coreutils tar gawk cpio  zip unzip

配置编译参数

进入jdk 源码目录,设置configure执行权限

cd jdk11 
chmod +x configure

configure编译参数

# 这几个参数意义: 指定编译64位虚拟机器、编译级别、关闭警告当错误处理(这里尤其重要)
bash ./configure --with-target-bits=64 --with-debug-level=slowdebug --disable-warnings-as-errors

静等十秒左右,就可看到如下成果提示


image.png

编译OpenJDK11源码

Run make

make images

耐心等待,make完成,如果看到下面提示,则说明编译成功;

image.png

五、验证新的JDK

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

至此,OpenJDK11源码的下载、修改、编译就这么完成了,是不是很简单呢?

如果您对这方面感兴趣,请关注我的文集:JVM ,后续会写更多JVM的实战经验。

相关文章

  • 尝试自己编译 Open Jdk

    今天想试试自己编译一下JDK参考博文 Java虚拟机(JVM源码):编译OpenJDK源码 第一步: 拉取 Ope...

  • JVM参数配置笔记

    参考: JVM(Java虚拟机)优化大全和案例实战

  • Java书籍推荐

    《深入理解Java虚拟机:JVM高级特性与最佳实践》 ***** 《HotSpot实战》 《Java并发编程实战》...

  • JVM虚拟机,Dalvik虚拟机,Art虚拟机

    JVM虚拟机 JVM虚拟机用来运行Java程序,java文件首先被编译成class字节码文件,然后交给虚拟机解释执...

  • jdk1.7编译环境

    jdk1.7编译环境 JVM源码—教你傻瓜式编译openjdk7(JAVA虚拟机爱好者必看) - 左潇龙 - 博客...

  • JVM DVM ART

    一.Java -> JVM JAVA为每一个平台开发一个 JVM,即 Java 虚拟机。Java 编译器将 .ja...

  • 书单

    技术书单 Java编程思想 深入理解Java虚拟机:JVM高级特性与最佳实践 HotSpot实战 Spring实战...

  • Java环境变量

    jre: java运行环境。 jre = java虚拟机(JVM:Java Virtual Machine) + ...

  • JVM调优

    JVM(Java虚拟机)优化大全和案例实战 JVM 优化经验总结 JVM 数据存储介绍及性能优化 JVM诊断...

  • JAVA虚拟机(JVM)三:类加载器子系统

    JAVA虚拟机(JVM)系列:JAVA虚拟机(JVM)一:了解JAVA体系结构JAVA虚拟机(JVM)二:JVM工...

网友评论

      本文标题:JAVA虚拟机(JVM)实战一:Docker容器环境下编译Ope

      本文链接:https://www.haomeiwen.com/subject/sllhfjtx.html