使用Docker编译OpenJDK8
简介
本文主要介绍如何用docker编译openjdk8.
步骤
1.前置环境
必须安装dokcer环境,然后才能执行下面的操作.
镜像地址: https://github.com/BoYiZhang/compile-openjdk8-in-docker.git
2.获取资源文件
git clone https://github.com/BoYiZhang/compile-openjdk8-in-docker.git
3.进入目录: ubuntu1404_openjdk8
打开项目目录compile-openjdk8-in-docker进入目录ubuntu1404_openjdk8
cd ubuntu1404_openjdk8
4.编译
docker build -t ubuntu1404_openjdk8:v1 .
[注意命令后面的那个点[ . ] ]
## Finished images (build time 00:01:08)
----- Build times -------
Start 2020-07-07 03:48:44
End 2020-07-07 04:19:45
00:01:24 corba
00:01:01 demos
00:17:27 hotspot
00:01:08 images
00:00:36 jaxp
00:01:02 jaxws
00:06:57 jdk
00:00:51 langtools
00:00:35 nashorn
00:31:01 TOTAL
-------------------------
Finished building OpenJDK for target 'images'
Removing intermediate container 69bcdd4b0831---> ba8a923bd614
Step 8/8 : RUN ls -al /opt/openjdk---> Running in ce954a436586
total 125072
drwxr-xr-x 1 root root 4096 Jul 7 03:48 .
drwxr-xr-x 1 root root 4096 Jul 7 03:46 ..
-rw-r--r-- 1 root root 128058047 Jan 14 20:07 openjdk-8u41-src-b04-14_jan_2020.zip
drwxr-xr-x 14 root root 4096 Jul 7 03:48 openjdk8
Removing intermediate container ce954a436586---> 23c0dfed1d0f
Successfully built 23c0dfed1d0f
Successfully tagged ubuntu1404_openjdk8:v1
MacBook-Pro:ubuntu1404_openjdk8 sysadmin$
5. 进入目录查看编译后的文件
docker run -ti --entrypoint /bin/sh ubuntu1404_openjdk8:v1
MacBook-Pro:ubuntu1404_openjdk8 sysadmin$
MacBook-Pro:ubuntu1404_openjdk8 sysadmin$ docker run -ti --entrypoint /bin/sh ubuntu1404_openjdk8:v1
#
# cd /opt/openjdk/openjdk8
#
# ls -al
total 440
drwxr-xr-x 14 root root 4096 Jul 6 18:06 .
drwxr-xr-x 1 root root 4096 Jul 6 18:06 ..
-rw-r--r-- 1 root root 70 Jan 14 19:58 .hgignore
-rw-r--r-- 1 root root 19704 Jan 14 19:58 .hgtags
drwxr-xr-x 2 root root 4096 Jan 14 19:58 .jcheck
-rw-r--r-- 1 root root 1503 Jan 14 19:58 ASSEMBLY_EXCEPTION
-rw-r--r-- 1 root root 19263 Jan 14 19:58 LICENSE
-rw-r--r-- 1 root root 6232 Jan 14 19:58 Makefile
-rw-r--r-- 1 root root 1549 Jan 14 19:58 README
-rw-r--r-- 1 root root 129333 Jan 14 19:58 README-builds.html
-rw-r--r-- 1 root root 178392 Jan 14 19:58 THIRD_PARTY_README
-rwxr-xr-x 1 root root 8612 Jul 6 18:06 a.out
drwxr-xr-x 3 root root 4096 Jul 6 18:06 build
drwxr-xr-x 6 root root 4096 Jan 14 19:58 common
-rwxr-xr-x 1 root root 1235 Jan 14 19:58 configure
drwxr-xr-x 5 root root 4096 Jan 14 19:58 corba
-rw-r--r-- 1 root root 3095 Jan 14 19:58 get_source.sh
drwxr-xr-x 7 root root 4096 Jan 14 19:59 hotspot
drwxr-xr-x 6 root root 4096 Jan 14 19:59 jaxp
drwxr-xr-x 6 root root 4096 Jan 14 19:59 jaxws
drwxr-xr-x 6 root root 4096 Jan 14 20:02 jdk
drwxr-xr-x 6 root root 4096 Jan 14 20:02 langtools
drwxr-xr-x 6 root root 4096 Jan 14 19:58 make
drwxr-xr-x 12 root root 4096 Jan 14 20:03 nashorn
drwxr-xr-x 2 root root 4096 Jan 14 19:58 test
#
代码结构如下:
├─agent Serviceability Agent的客户端实现
├─make 用来build出HotSpot的各种配置文件
├─src HotSpot VM的源代码
│ ├─cpu CPU相关代码(汇编器、模板解释器、ad文件、部分runtime函数在这里实现)
│ ├─os 操作系相关代码
│ ├─os_cpu 操作系统+CPU的组合相关的代码
│ └─share 平台无关的共通代码
│ ├─tools 工具
│ │ ├─hsdis 反汇编插件
│ │ ├─IdealGraphVisualizer 将server编译器的中间代码可视化的工具
│ │ ├─launcher 启动程序“java”
│ │ ├─LogCompilation 将-XX:+LogCompilation输出的日志(hotspot.log)整理成更容易阅读的格式的工具
│ │ └─ProjectCreator 生成Visual Studio的project文件的工具
│ └─vm HotSpot VM的核心代码
│ ├─adlc 平台描述文件(上面的cpu或os_cpu里的*.ad文件)的编译器
│ ├─asm 汇编器接口
│ ├─c1 client编译器(又称“C1”)
│ ├─ci 动态编译器的公共服务/从动态编译器到VM的接口
│ ├─classfile 类文件的处理(包括类加载和系统符号表等)
│ ├─code 动态生成的代码的管理
│ ├─compiler 从VM调用动态编译器的接口
│ ├─gc_implementation GC的实现
│ │ ├─concurrentMarkSweep Concurrent Mark Sweep GC的实现
│ │ ├─g1 Garbage-First GC的实现(不使用老的分代式GC框架)
│ │ ├─parallelScavenge ParallelScavenge GC的实现(server VM默认,不使用老的分代式GC框架)
│ │ ├─parNew ParNew GC的实现
│ │ └─shared GC的共通实现
│ ├─gc_interface GC的接口
│ ├─interpreter 解释器,包括“模板解释器”(官方版在用)和“C++解释器”(官方版不在用)
│ ├─libadt 一些抽象数据结构
│ ├─memory 内存管理相关(老的分代式GC框架也在这里)
│ ├─oops HotSpot VM的对象系统的实现
│ ├─opto server编译器(又称“C2”或“Opto”)
│ ├─prims HotSpot VM的对外接口,包括部分标准库的native部分和JVMTI实现
│ ├─runtime 运行时支持库(包括线程管理、编译器调度、锁、反射等)
│ ├─services 主要是用来支持JMX之类的管理功能的接口
│ ├─shark 基于LLVM的JIT编译器(官方版里没有使用)
│ └─utilities 一些基本的工具类
└─test 单元测试
6. 复制文件到指定目录
使用 docker ps -a
获取到镜像的id, 然后使用下面的名称将编译后的文件复制出来.
[当然编译的时候也可以把编译目录opt外挂到磁盘上,这样编译后的目录就直接在本地磁盘上上了]
docker cp 884d465e7e2b:/opt/openjdk/openjdk8 /workspace
MacBook-Pro:ubuntu1404_openjdk8 sysadmin$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
884d465e7e2b ubuntu1404_openjdk8:v1 "/bin/sh" 9 minutes ago Exited (0) 4 minutes ago jovial_blackwell
Dockerfile
FROM ubuntu:14.04
MAINTAINER BoYiZhang [ https://github.com/BoYiZhang ]
# backup data source
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak
# Replace data source
COPY ./sources.list /etc/apt/
# Installation dependency
RUN apt-get update \&& apt-get install -y curl ssh zip unzip vim ant git mercurial build-essential ccache cpio g++ gcc curl libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev libcups2-dev libfreetype6-dev libasound2-dev libelf-dev openjdk-7-jdk gdb# mkdir work dir
RUN mkdir -p /opt/openjdk
# other ways to get the source of openjdk8
# RUN hg clone http://hg.openjdk.java.net/jdk8u/jdk8u/# download soucecode && compile
RUN cd /opt/openjdk && wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-src-b04-14_jan_2020.zip && unzip openjdk-8*.zip && mv openjdk openjdk8 && cd openjdk8 && sed -i 's/3%/3% 4%/g' hotspot/make/linux/Makefile && chmod a+x configure && ./configure --with-debug-level=slowdebug --with-target-bits=64 --with-freetype-include=/usr/include/freetype2 --with-freetype-lib=/usr/lib/x86_64-linux-gnu && make clean && make images# view compiled files
RUN ls -al /opt/openjdk
使用Docker编译OpenJDK8相关推荐
- 在docker上编译openjdk8
以前曾经试过在VMware上安装linux,再在linux上编译openjdk8,但是每次都不顺利,例如linux环境,预装依赖软件,openjdk源码的选择等环境都会遇到问题,一旦失败再重新开始挺费 ...
- 利用docker编译Android源码
本文描述了如何在一个docker上搭建Android编译环境. Docker Docker是一个计算机操作系统的容器,利用主机内核,搭建独立的文件系统,让用户程序运行在一个与宿主机文件系统无关的独立环 ...
- JVM-Ubuntu18.04.1下编译OpenJDK8
近期开始学习JVM,看的是周老师的<深入理解Java虚拟机>,打算先自己编译个JDK来提升对JVM的兴趣.本文分三部分来描述编译OpenJDK的过程,分别是编译前准备工作.构建编译环境.进 ...
- 使用 docker 编译运行 abp 项目
在前面的两篇文章中,介绍了如何在华为鲲鹏架构及其Euler系统上运行dotnet core, 使用docker运行了默认的mvc模板项目,这篇文章继续介绍在docker中运行更复杂的dotnet co ...
- 树莓派 编译live555_树莓派raspberry4B入坑指南 part-6 docker编译古灵币钱包
在上一节我们已经部署好了grin服务,今天讲讲如何编译grin-wallet. grin区块链包含自底向上分三个部分,层层依赖密不可分: grin:grin区块链server,提供chaindata数 ...
- coco训练集darknet_YOLOv4: Darknet 如何于 Docker 编译,及训练 COCO 子集
YOLO 算法是非常著名的目标检测算法.从其全称 You Only Look Once: Unified, Real-Time Object Detection ,可以看出它的特性:Look Once ...
- 魔兽世界服务端AzerothCore+Centos系统+docker编译教程
魔兽世界服务端AzerothCore+Centos系统+docker编译教程 1.1 准备工作 1.1.1 准备 1.1.2 安装软件 1.1.3 下载源码 1.1.4 地图文件 1.2 修改配置文件 ...
- ubuntu20.04编译openjdk8
1. 下载jdk1.7 Java Archive Downloads - Java SE 7 解压tar -xvzf,移动到/usr/lib/jvm/下 2.hg clone http://hg.op ...
- 小熊派折叠开发板Docker编译烧录安装HAP
有些小伙伴已经使用了官方的Docker环境编译烧录了鸿蒙的开发板,比如说HI3861和HI3516,或者其他的开发板,这个时候如果买了小熊派折叠开发板,那环境应该怎么配置呢? 1.基础的编译环境 鸿蒙 ...
最新文章
- 通用httpclient生成方式
- 实验三 编程、编译、连接、跟踪
- PMCAFF专访:搜狗effevo,这一次我们想连接“人”
- Effective C# Item23:避免返回内部类对象的引用
- JMeter 下载安装教程
- android dimensions.xml,android – Value等于match_parent或fill_parent在dimensions.xml?
- 【转】智能音箱技术概览
- linux 封装python,基于linux下python学习(封装)
- sed 删除某一行_Linux常用命令三剑客之sed,您真的会用吗?
- django-模板语言-判断语句
- 将深度缓冲z值变换到相机坐标系
- python-多线程共享内存
- 用indesign怎么更换名牌姓名_北京怎么脱单?来北京相亲会,哪里有单身交友聚会?户外交友活动...
- MLX90614使用和组装的说明
- 算法特训营第2周刷题题目
- Java 获取主机ip地址(ipv4)
- java 线程 中断标志位
- 软考备战:软考中级课程+参考资料
- 创始人如何设置公司股权结构?
- 深度学习中FLOPs计算