ubuntu下编译JDK7
心里准备
安装会遇到各种问题,需要静下心来解决,很多问题谷歌上的和自己本身的不一样,但总的来说编译完成的时候还是觉得很高兴的。
各种错的参考地址:http://www.centoscn.com/image-text/install/2015/0908/6140.html
后面才发现的= =,之前折腾好久
环境介绍
操作系统:
1 2
| dream@dream:~/jvm/openjdk$ uname -a Linux dream 4.4.0-28-generic
|
ubuntu 64位,16.04LTS
jdk
因为jdk的编译很多也是java编写的,所以也需要一个基础版本的jdk用来编译它,叫bootsrap jdk。
- bootstrap jdk:sun的jdk6u45,注意尽量不要使用编译目标的同版本或以后版本,会出一些问题。尽量安装编译目标的readme中的环境来。下载并解压。
- 目标版本:openjdk7,下载并解压。
编译所需环境
1 2 3 4
| sudo apt-get install ccache make gcc g++ ca-certificates ca-certificates-java sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev sudo apt-get install libasound2-dev libcups2-dev libfreetype6-dev sudo apt-get install ALSA libcups2-dev
|
个人环境不同,有的依赖组件在编译时报错会提示,如果出错提示,再安装即可。
编译使用脚本
虽然脚本中有unset jdk环境变量,但是最好还是将自己设置的环境变量注释掉。
2个需要注意和修改的地方ALT_BOOTDIR修改为自己的bootsrap jdk根目录,ALT_OUTPUTDIR修改为想要存放编译结果的目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #!/usr/bin/env bash
export LANG=C
export ALT_BOOTDIR=/home/dream/Downloads/jdk1.6.0_45
export ALLOW_DOWNLOADS=true
export HOTSPOT_BUILD_JOBS=4 export ALT_PARALLEL_COMPILE_JOBS=4
export SKIP_COMPARE_IMAGES=true
export USE_PRECOMPILED_HEADER=true
export BUILD_LANGTOOLS=true
export BUILD_HOTSPOT=true export BUILD_JDK=true
BUILD_DEPLOY=false
BUILD_INSTALL=false
export ALT_OUTPUTDIR=/home/dream/jvm/build
unset JAVA_HOME unset CLASSPATH
make 2>&1 | tee $ALT_OUTPUTDIR/build.log
|
将上面的脚本存放到待编译的jdk根目录下,本人的是make.sh文件,执行:
修改一些文件
由于一些小bug,会导致编译失败。我们修改一些文件。
修改日期时间配置文件
1 2 3 4 5 6 7
| jdk/src/share/classes/java/util/CurrencyData.properties 535行 TR=TRL;2004-12-31-22-00-00;TRY 修改为当前年份的10年内,eg: 今年2016,那么修改为 TR=TRL;2015-12-31-22-00-00;TRY 这个是根据地区码定的时间,所以最好是把此文件中所有涉及的时间日期按上面的规则修改。
|
修改虚拟机make文件
这个会导致编译jvm失败,报Err 2,不支持的操作系统,原因是部支持当前linux内核版本
1 2 3 4 5
| hotspot/make/linux/Makefile 234行 SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3% 为 SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3% 4%
|
编译
在编译目标的jdk根目录下执行
进行编译。
我的4核4线程的编译结果:
1 2 3 4 5 6 7 8 9 10 11
| #-- Build times ---------- Target all_product_build Start 2016-06-30 10:36:48 End 2016-06-30 10:49:06 00:01:03 corba 00:02:52 hotspot 00:00:11 jaxp 00:00:15 jaxws 00:07:37 jdk 00:00:20 langtools 00:12:18 TOTAL
|
最后进入编译结果存放的j2sdk-image目录,就是编译的jdk,可以作为完整的jdk使用。测试一下:
进入此目录的bin目录下执行:
1 2 3 4
| dream@dream:~/jvm/build/j2sdk-image/bin$ ./java -version openjdk version "1.7.0-internal" OpenJDK Runtime Environment (build 1.7.0-internal-root_2016_06_30_10_36-b00) OpenJDK 64-Bit Server VM (build 24.0-b56, mixed mode)
|
显示root是因为我使用的是
sudo sh make.sh