下图是OpenJDK6、OpenJDK7、OpenJDK7u和OpenJDK8这几个项目之间的关系:

下面把编译步骤记录下来:

  • 编译环境 Ubuntu 16.04.4 LTS
  • jdk版本 openjdk-7u40-fcs-src-b43-26_aug_2013.zip

1 Build Environments

1.1 编译环境:Ubuntu 16.04

vagrant@ubuntu:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial

1.2 配置apt-get源

# http://wiki.ubuntu.org.cn/源列表
vi /etc/apt/sources.list

参考模板,把下面的内容写入到/etc/apt/sources.list

deb http://mirrors.sohu.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ xenial-backports main restricted universe multiverse
##測試版源
deb http://mirrors.sohu.com/ubuntu/ xenial-proposed main restricted universe multiverse
# 源碼
deb-src http://mirrors.sohu.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ xenial-backports main restricted universe multiverse
##測試版源
deb-src http://mirrors.sohu.com/ubuntu/ xenial-proposed main restricted universe multiverse
# Canonical 合作夥伴和附加
deb http://archive.canonical.com/ubuntu/ xenial partner
deb http://extras.ubuntu.com/ubuntu/ xenial main

服务器列表

# 阿里云
http://cn.archive.ubuntu.com/ubuntu/
# 搜狐(山東聯通千兆接入)
http://mirrors.sohu.com/ubuntu/
# 中科大 LUG(合肥,電信/聯通/移動/教育網自動分流,同時也是 Deepin 官方)
https://mirrors.ustc.edu.cn/ubuntu/ (v4/v6)
http://mirrors4.ustc.edu.cn/ubuntu/ (v4)
http://mirrors6.ustc.edu.cn/ubuntu/ (v6)

1.3 安装依赖项目

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential gawk m4 libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-dev x11proto-print-dev binutils libmotif-dev x11proto-print-dev binutils ant -y # 安装解压工具,解压源码用到
sudo apt-get install unzip -y

1.4 单独安装jdk6

这里安装的oraclejdk-6

# Downloads and installs Oracle Java 6 from here:
# http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html#jdk-6u45-oth-JPR
wget \
--no-cookies \
--no-check-certificate \
--header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" \
http://download.oracle.com/otn-pub/java/jdk/6u45-b06/jdk-6u45-linux-x64.bin
chmod +x jdk-6u45-linux-x64.bin
./jdk-6u45-linux-x64.bin
sudo mv -T jdk1.6.0_45 /usr/lib/jvm/java-6-oracle-amd64
sudo chown -R root: /usr/lib/jvm/java-6-oracle-amd64 # 记住这个路径(/usr/lib/jvm/java-6-oracle-amd64),后面会用到

2 Getting the Source

下载源码,可以通过仓库中获取或直接下载官方打包好的源码包

# 创建一个目录来存放下载的jdk源码
mkdir /work/jvm && cd /work/jvm # 下载
# wget http://www.java.net/download/openjdk/jdk7/promoted/b24/openjdk-7u6-fcs-src-b24-28_aug_2012.zip
wget https://download.java.net/openjdk/jdk7u40/promoted/b43/openjdk-7u40-fcs-src-b43-26_aug_2013.zip

验证源码包

md5sum openjdk-7u40-fcs-src-b43-26_aug_2013.zip
18dd8e96b2d7344635dd96fd280cc18b openjdk-7u40-fcs-src-b43-26_aug_2013.zip

解压源码包

# 解压,解压后的目录为openjdk
unzip openjdk-7u40-fcs-src-b43-26_aug_2013.zip # 查看编译文档
openjdk/README-builds.html

3 Build

3.1 编译前的准备

为避免编译出错,需要做的操作

# 通过修改CurrencyData.properties,把10年之前的时间修改为10年之内
vi jdk/src/share/classes/java/util/CurrencyData.properties
2008--->2017
2006--->2017
2005--->2017
2004--->2017 # 创建编译输出目录
mkdir -p /work/jvm/jdkBuild/openjdk7u40/build # 进入解压后的源码目录/work/jvm/openjdk
cd /work/jvm/openjdk

3.2 设置环境变量并编译

保存成脚本init.sh,执行脚本,待脚本成功执行完毕就编译好了,当然中间会遇到各种小问题

export LANG=C
# Bootstrap JDK的安装路径
export ALT_BOOTDIR=/usr/lib/jvm/java-6-oracle-amd64
export ALT_JDK_IMPORT_PATH=/usr/lib/jvm/java-6-oracle-amd64 # 允许下载依赖
export ALLOW_DOWNLOADS=true # 并行编译的线程数,设置为和内核CPU一致
export HOTSPOT_BUILD_JOBS=8
export ALT_PARALLEL_COMPILE_JOBS=8 # 跳过"比较本次build出来的映像与先前版本的差异"
export SKIP_COMPARE_IMAGES=true # 使用预编译头文件,加上编译会快一点
export USE_PRECOMPILED_HEADER=true # 要编译的内容
export BUILD_LANGTOOLS=true
export BUILD_HOTSPOT=true
export BUILD_JDK=true # 设置为false,避开javaws和浏览器Java插件之友的部分的build
export BUILD_DEPLOY=false # 设置为false,就不会build出安装包
export BUILD_INSTALL=false # fix error
export DISABLE_HOTSPOT_OS_VERSION_CHECK=OK # 编译结果所存放的路径
export ALT_OUTPUTDIR=/work/jvm/jdkBuild/openjdk7u40/build # 去掉这两个变量以避免不必要的错误
unset JAVA_HOME
unset CLASSPATH # 检查
make sanity # 编译
make 2>&1 | tee $ALT_OUTPUTDIR/build.log

执行编译

sudo sh init.sh

3.3 遇到的问题

在编译过程中遇到了各种问题,但大部分都能通过“编译前的准备”和”设置环境变量”这两步的配置来避免,但是下面这个错误在第一次编译出现,第二次编译出现,第三次编译就没有了,好奇怪。

第一次编译过程中出现如下错误(RMIConnectioinImpl_Stub.class Error),再次编译

第二次编译又出现如下错误(RMIServicerImpl_Stub.class Error),再次编译就成功了。

3.4 可遇到的问题

下面是在初始编译时遇到问题参考的别人总结的解决方法。把错误的关键字在下面博客页面中查找肯定能查找到解决方法的。

3.5 编译成功

编译结束后,将输出类似下面的日志清单所示内容。如果之前已经全量编译过,只修改了少量文件,增量编译可以在数十秒内完成。

进入OpenJDK源码下的build/j2sdk-image目录,验证一下:

4 Reference

最新文章

  1. 解决Safari高版本浏览器中默认禁用第三方COOKIE(含demo)
  2. maven的简单说明
  3. html5学习测试
  4. Swift学习初步(一)
  5. php有些系统会报错或提示 Cannot modify header information - headers already sent by
  6. ios即时通讯客户端开发之-mac上基于XMPP的聊天客户端开发环境搭建
  7. 座IO理解力
  8. matlab中hold指令、figure指令及subplot指令的使用
  9. C#获取网页的HTML码、下载网站图片 get post
  10. 英文写作强调技巧:alliteration, assonance, consonance
  11. 把目录C:\Python34\PCI_Code\chapter2\加到系统路径中
  12. Cisco 交换机修改密码
  13. hdfs启用垃圾站功能
  14. 重置outlook 2010
  15. 网站性能测试PV到TPS的转换以及TPS的波动和淘宝性能测试要点
  16. java中的==、equals()、hashCode()源码分析(转载)
  17. AC日记——小魔女帕琪 洛谷 P3802
  18. RENOUNCEMENT
  19. jQuery--加一行减一行
  20. Byte数据类型—Java

热门文章

  1. HTML5+CSS3兼容收藏夹
  2. 使用Dropbox搭建静态网站详细教程
  3. H5使用Canvas绘图
  4. ES6-11学习笔记--Generator
  5. 获取MCCMNC号
  6. js判断输入数字是否是整数,金额、数字
  7. 微信小程序命名规则
  8. Git---git的常用操作
  9. Java基础语法01——变量与运算符
  10. B. Build the Permutation