简介

本文主要介绍如何用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相关推荐

  1. 在docker上编译openjdk8

    以前曾经试过在VMware上安装linux,再在linux上编译openjdk8,但是每次都不顺利,例如linux环境,预装依赖软件,openjdk源码的选择等环境都会遇到问题,一旦失败再重新开始挺费 ...

  2. 利用docker编译Android源码

    本文描述了如何在一个docker上搭建Android编译环境. Docker Docker是一个计算机操作系统的容器,利用主机内核,搭建独立的文件系统,让用户程序运行在一个与宿主机文件系统无关的独立环 ...

  3. JVM-Ubuntu18.04.1下编译OpenJDK8

    近期开始学习JVM,看的是周老师的<深入理解Java虚拟机>,打算先自己编译个JDK来提升对JVM的兴趣.本文分三部分来描述编译OpenJDK的过程,分别是编译前准备工作.构建编译环境.进 ...

  4. 使用 docker 编译运行 abp 项目

    在前面的两篇文章中,介绍了如何在华为鲲鹏架构及其Euler系统上运行dotnet core, 使用docker运行了默认的mvc模板项目,这篇文章继续介绍在docker中运行更复杂的dotnet co ...

  5. 树莓派 编译live555_树莓派raspberry4B入坑指南 part-6 docker编译古灵币钱包

    在上一节我们已经部署好了grin服务,今天讲讲如何编译grin-wallet. grin区块链包含自底向上分三个部分,层层依赖密不可分: grin:grin区块链server,提供chaindata数 ...

  6. coco训练集darknet_YOLOv4: Darknet 如何于 Docker 编译,及训练 COCO 子集

    YOLO 算法是非常著名的目标检测算法.从其全称 You Only Look Once: Unified, Real-Time Object Detection ,可以看出它的特性:Look Once ...

  7. 魔兽世界服务端AzerothCore+Centos系统+docker编译教程

    魔兽世界服务端AzerothCore+Centos系统+docker编译教程 1.1 准备工作 1.1.1 准备 1.1.2 安装软件 1.1.3 下载源码 1.1.4 地图文件 1.2 修改配置文件 ...

  8. ubuntu20.04编译openjdk8

    1. 下载jdk1.7 Java Archive Downloads - Java SE 7 解压tar -xvzf,移动到/usr/lib/jvm/下 2.hg clone http://hg.op ...

  9. 小熊派折叠开发板Docker编译烧录安装HAP

    有些小伙伴已经使用了官方的Docker环境编译烧录了鸿蒙的开发板,比如说HI3861和HI3516,或者其他的开发板,这个时候如果买了小熊派折叠开发板,那环境应该怎么配置呢? 1.基础的编译环境 鸿蒙 ...

最新文章

  1. 通用httpclient生成方式
  2. 实验三 编程、编译、连接、跟踪
  3. PMCAFF专访:搜狗effevo,这一次我们想连接“人”
  4. Effective C# Item23:避免返回内部类对象的引用
  5. JMeter 下载安装教程
  6. android dimensions.xml,android – Value等于match_parent或fill_parent在dimensions.xml?
  7. 【转】智能音箱技术概览
  8. linux 封装python,基于linux下python学习(封装)
  9. sed 删除某一行_Linux常用命令三剑客之sed,您真的会用吗?
  10. django-模板语言-判断语句
  11. 将深度缓冲z值变换到相机坐标系
  12. python-多线程共享内存
  13. 用indesign怎么更换名牌姓名_北京怎么脱单?来北京相亲会,哪里有单身交友聚会?户外交友活动...
  14. MLX90614使用和组装的说明
  15. 算法特训营第2周刷题题目
  16. Java 获取主机ip地址(ipv4)
  17. java 线程 中断标志位
  18. 软考备战:软考中级课程+参考资料
  19. 创始人如何设置公司股权结构?
  20. 深度学习中FLOPs计算

热门文章

  1. [MFC] 脚本错误:对象不支持此属性或方法
  2. C语言 蓝桥杯 算法训练 ALGO-1003 礼物
  3. 黑寡妇优化算法(Black Widow Optimization Algorithm, BWOA)
  4. Java实现Ping命令
  5. 修改注册表消除应用软件乱码显示(转)
  6. 数据价值安全释放 华坤道威详解隐私计算技术
  7. RockChip MPP编码
  8. 作业七—“南通大学教务管理系统微信公众号”用户体验分析
  9. python程序退出策略
  10. java 线程僵死_线程池子线程超时(僵死)问题