java编译jdk 7源码

2019-02-15  本文已影响6人  疯狂的冰块

1. 编译环境

测试环境:Ubuntu 16.04 LST

已安装JDK:oracle 1.7.0_80-b15

编译目标:openjdk 7u

2. 安装依赖

sudo apt-get update
sudo apt-get install openjdk-7-jdk ccache make gcc g++ ca-certificates ca-certificates-java gawk libxext-dev libxrender-dev libxtst-dev libasound2-dev libcups2-dev libfreetype6-dev libcups2-dev

注意需要安装ant 的1.9.x版本,1.10.x版本以上需要依赖JDK8,这里编译JDK7 必须安装1.9.x

ant 官网:https://ant.apache.org/

ant-1.9.13的下载地址:

http://mirror.cc.columbia.edu/pub/software/apache//ant/binaries/apache-ant-1.9.13-bin.zip

3. 下载源码

# 安装jdk的版本控制系统hg
sudo apt install mercurial
# 克隆项目
hg clone http://hg.openjdk.java.net/jdk7u/jdk7u
# 进入项目
cd jdk7u
# 下载源码
sh get_source.sh

4. 检测环境是否搭建完毕

运行命令:

export LANG=C
unset JAVA_HOME
unset CLASSPATH

检测当前环境是否成功:

make sanity

如果有sanity check passed代表成功!

5. 开始编译

在openjdk 源代码目录创建make.sh文件,文件内容如下oracle jdk要根据不同机器进行更改,还有cpu内核数量,编译结果存放路径

需要修改自己的其中的ALT_BOOTDIR

#!/usr/bin/env bash
#语言选项,这个必须设置,否则编译好后会出现一个HashTable的NPE错
export LANG=C

#Bootstrap JDK的安装路径(就是已经安装的JDK的位置)。必须设置 。
export ALT_BOOTDIR=/usr/jdk7

#允许自动下载依赖
export ALLOW_DOWNLOADS=true

#并行编译的线程数,设置为和CPU内核数量一致即可
export HOTSPOT_BUILD_JOBS=4
export ALT_PARALLEL_COMPILE_JOBS=4

#比较本次build出来的映像与先前版本的差异。这个对我们来说没有意义,必须设置为false,否则sanity检查会报缺少先前版本JDK的映像。如果有设置dev或者DEV_ONLY=true的话这个不显式设置也行。
export SKIP_COMPARE_IMAGES=true

#使用预编译头文件,不加这个编译会更慢一些
export USE_PRECOMPILED_HEADER=true

#要编译的内容
export BUILD_LANGTOOLS=true
#export BUILD_JAXP=false
#export BUILD_JAXWS=false
#export BUILD_CORBA=false
export BUILD_HOTSPOT=true
export BUILD_JDK=true

#要编译的版本
#export SKIP_DEBUG_BUILD=false
#export SKIP_FASTDEBUG_BUILD=true
#export DEBUG_NAME=debug

#把它设置为false可以避开javaws和浏览器Java插件之类的部分的build。
BUILD_DEPLOY=false

#把它设置为false就不会build出安装包。因为安装包里有些奇怪的依赖,但即便不build出它也已经能得到完整的JDK映像,所以还是别build它好了。
BUILD_INSTALL=false

#编译结果所存放的路径
export ALT_OUTPUTDIR=/home/ice/jvm/build

#这两个环境变量必须去掉,不然会有很诡异的事情发生(我没有具体查过这些“”诡异的事情”,Makefile脚本检查到有这2个变量就会提示警告“)
unset JAVA_HOME
unset CLASSPATH

make 2>&1 | tee $ALT_OUTPUTDIR/build.log
sh make.sh

在笔者的电脑上用了17分钟:

上一篇下一篇

猜你喜欢

热点阅读