注:博主是在centos7上面进行编译的.
1.jdk代码管理
openjdk源代码官网各个版本的jdk源代码在上面都有
openjdk源代码是用一个叫mercurial(轻量级分布式版本控制系统)的工具来管理源代码的
首先下载安装mercurial的源代码下载完成后解压下来进入源代码文件夹
1 | [root@localhost opnesource]# tar -zxvf mercurial-4.6.tar.gz |
打开Makefile文件找到export PREFIX=/usr/local可以指定安装目录修改完成后输入make install命令开始安装.
1 | [root@localhost mercurial-4.6]# make install |
安装完成后输入hg version有以下信息就表示可以了
1 | [root@localhost opensource]# hg version |
然后用命令将openjdk源代码clone下来
1 | [root@localhost jdk]# hg clone http://hg.openjdk.java.net/jdk7u/jdk7u-dev |
如果发现有exit code 255应该是下载失败了,需要从新clone
1 | [root@localhost jdk7u-dev]# hg clone http://hg.openjdk.java.net/jdk7u/jdk7u-dev/hotspot |
代码确认下载完成后就可以开始编译了.
2.开始编译jdk代码
2.1 设置编译环境变量
执行下面的命令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
40export LANG=C
export ALT_BOOTDIR=/usr/local/jdk1.7/ #设置jdk
export ALLOW_DOWNLOADS=true
export HOTSPOT_BUILD_JOBS=6
export ALT_PATALLER_COMPILE_JOBS=6
export SKIP_COMPARE_IMAGES=true
export USE_PRECOMPILED_HEADER=true
export BUILD_LANGTOOLS=true
export BUILD_HOTSPOT=true #设置是否编译HOTSPOT模块
export BUILD_JDK=true #设置是否编译JDK模块
export BUILD_JAXP=true #设置是否编译JAXP模块
export BUILD_JAXWS=true #设置是否编译JAXWS模块
export BUILD_CORBA=true #设置是否编译CORBA模块
#export SKIP_DEBUG_BUILD=false
#export SKIP_FASTDEBUG_BUILD=true
BUILD_DEPLOY=false
BUILD_INSTALL=false
export ALT_OUTPUTDIR=/root/temp/jdk7u #输出的位置
#export CORBA_DIST=$ALT_OUTPUTDIR/corba/dist
#export JAXP_DIST=$ALT_OUTPUTDIR/jaxp/dist
#export JAXWS_DIST=$ALT_OUTPUTDIR/jaxws/dist
unset JAVA_HOME #卸载JAVA_HOME
unset CLASSPATH #卸载CLASSPATH
unset JAVA_OPTS
2.2依赖环境安装
1 | [root@localhost jdk7u-dev]# yum install -y ant ant-nodeps #如果电脑上有ant可以跳过这一步 |
如果不安装这些依赖可能会报错.
2.3开始编译
上面的命令执行成功后就可以使用make命令开始编译了.1
[root@localhost jdk7u-dev]# make
执行make报了下面这个错误
1 | Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/tools/ant/launch/Launcher : Unsupported major.minor version 52.0 |
这是因为设置export ALT_BOOTDIR设置的是JDK1.7的,出现这个错误是因为用高版本的的JDK编译的class放到低版本来执行才会出现这个错误
我编译的JDK是1.7所以要设置1.6的JDK才行
但是本宝宝后来想了想觉得编译1.7的版本太低了,就索性直接编译JDK1.8的吧.
2.3.1下载jdk1.8
1 | [root@localhost jdk]# hg clone http://hg.openjdk.java.net/jdk8u/jdk8u-dev |
下载步骤同上代码要保证都下载完成,因为这个有点不稳定可能某些模块下载失败,下载失败就手动执行命令下载.
2.3.2编译jdk1.8
cd进入1.8代码目录,而且要把环境变量的设置都执行一遍和上面2.1一样,然后授权configure文件,授权后执行configure文件,就会生成一个build文件夹等下编译的内容全部会在这个文件夹下面.
1 | [root@localhost jdk]# cd jdk8u-dev |
最后一步执行make
1 | [root@localhost jdk8u-dev]# make |
这一步等时间比较长,执行完后如果没有error就表示编译成功了.
然后打开build下面的那个文件夹
hotspot,jaxp,corba,jaxws,jdk,langtools编译后的文件都有然后打开jdk文件夹
进入bin文件夹
java,javac,jmap,jps等java二进制文件都在然后执行./java -version
1 | [root@localhost bin]# ./java -version |
看到了版本为openjdk version “1.8.0-internal”.