在Centos7下自己编译openjdk源码,openjdk
具体步骤:
-
获取openjdk源码
-
安装openjdk6–BoostrapJK
-
安装编译时的依赖
-
配置环境变量
-
编译
1. 获取openjdk源码
可以到这里去下载,OpenJDK Source Releases
我下载的是openjdk-7u40版本,openjdk7,update40,build43
2. 下载jdk6–BoostrapJDK
我使用jdk6来辅助编译。可以到oracle官网下载,jdk-6u45-linux-x64.bin
3.安装编译时的依赖
可以使用以下命令一次安装完成
yum -y install build-essential gawk m4
openjkd-6-jkd libasound2-dev libcups2-dev
libxrender-dev xorg-dev xutils-dev
xllproto-print-dev binutils libmotif3
libmotif-dev ant
3.配置环境变量,编译
OpenJKD在编译时读取的环境变量很多,但是大多数都有默认值,必须设置的只有两个:LANG和ALT_BOOTDIR。分别为C跟bootJDK的路径
所有的环境变量可以使用下面的脚本设置:
export LANG=C
export ALT_BOOTDIR=/opt/openJDK/jdk1.6.0_45
export ALLOW_DOWNLOADS=true
export HOTSPOT_BUILD_JOBS=2
export ALT_PARALLEL_COMPILE_JOBS=2
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=/opt/openJDK/openjdk/build
unset CLASSPATH
unset JAVA_HOME
unset LD_LIBRARY_PATH
全部设置结束之后,可以输入 make sanity 检测是否正确,如果一切顺利,会输出:Sanity check passed.就可以编译了。 输入make(不加参数默认为make all),我的虚拟机配置比较低,整个编译的过程用了一个多钟。
结果如下:
我在虚拟机中编译的,而且配置不高,所以有点慢.
那么问题来了,如何看结果ne?
编译完成之后,进入OpenJDK源码下的build/j2sdk-image目录,(或者build-debug、build-fastdebug这两个目录),这是整个JDK完整编译结果,内容为debug版jdk,将其复制到%JAVA_HOME%下,替换Oracle JDK。就可以作为一个完整的JDK使用,编译出来的虚拟机,在-version命令中带有用户的机器名。
[root@localhost ~]# java -version
openjdk version "1.7.0-internal-debug"
OpenJDK Runtime Environment (build 1.7.0-internal-debug-root_2016_04_25_20_00-b00)
OpenJDK 64-Bit Server VM (build 24.0-b56-jvmg, mixed mode)
大多数情况我们只关心Hotspot虚拟机,只想单独编译它的话,那么使用hotspot/make目录下的MakeFile进行替换即可,其他参数与前面一致,这时候虚拟机的输出结果存放在
build/hotspot/outputdir/linux_amd64_compiler2 中,里面对应了不同的优化级别的目录。
进入 目录jvmg,在运行虚拟机前,还要手工编辑目录下的env.sh文件,这个文件由编译脚本自动产生,用于设置虚拟机的环境变量,里面已经发布了”JAVA_HOME,CLASSPATH,HOTSPOT_BUILD_USER” 3个环境变量,还需要增加一个“LD_LIBRSRY_CLASSPATH”:
{% codeblock lang:Java %}
LD_LIBRARY_PATH=.:JAVAHOME/jre/lib/amd64/nativethreads:{JAVA_HOME}/jre/lib/amd64:/opt/openJDK/openjdk/build/hotspot/outputdir/linux_amd64_compiler2/product
export LD_LIBRARY_PATH
{% endcodeblock %}
然后执行
. ./env.sh
./gama -version #有可能是test_gamma,这是自带的一段八皇后代码
结果如下
自己编译的虚拟机成功运行起来,哈哈哈~
编译过程中有可能报错:
Error: time is more than 10 years from present: 1104530400000 when building java/openjdk* lists.freebsd.org
通过修改CurrencyData.properties文件, 把10年之前的时间修改为10年之内即可
Index: /usr/openjdk/jdk/src/share/classes/java/util/CurrencyData.properties
把2006改掉就可以重新编译了
(责任编辑:IT) |