搞了一个星期太累,哈哈,总算是搞出来了,在这里写下经验,以便以后使用
参考:http://www.th7.cn/system/lin/201408/66351.shtml,
准备:ubuntu14.04 lts 64,openjdk源码文件(openjdk-7u6-fcs-src-b24-28_aug_2012.zip)
源码下载:http://www.java.net/download/openjdk/jdk7u6/promoted/b24/openjdk-7u6-fcs-src-b24-28_aug_2012.zip
步骤:
1》配置编译环境:
apt-get build-dep openjdk-6
apt-get install openjdk-6-jdk
apt-get install libasound-dev build-essential
2)
配置环境变量:
sudo vi /etc/profile
在最后加上:
export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile使jdk环境生效。(我碰到了openjdk的bug倒是不能编译,这里先用openjdk)
可以运行:java -version和javac -version看看版本
3)安排路径
下载好源码文件后:先放在/home/***目录下
unzip openjdk-7u6-fcs-src-b24-28_aug_2012.zip
得到一个openjdk文件夹,然后进入
cd openjdk
4)编译
创建一个脚本(build.sh)
#!/bin/bash
#设置语言
export LANG=C
export ALT_BOOTDIR=/usr/lib/jvm/java-1.6.0-openjdk-amd64/
#允许自动下载依赖包
export ALLOW_DOWNLOADS=true
#使用预编译头文件,不加这个编译会更慢
export USE_PRECOMPILED_HEADER=true
#要编译的内容
export BUILD_LANGTOOLS=true
export BUILD_JAXP=true
export BUILD_JAXWS=true
export BUILD_CORBA=true
export BUILD_HOSTPOT=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/openjdk/build
unset CLASSPATH
unset JAVA_HOME
make sanity
#makeARCH_DATA_MODEL=64
#BUILD_JAXWS=false
#BUILD_JAXP=false
make 2>&1 | tee $ALT_OUTPUTDIR/build.log
运行 sh build.sh
接下来是碰到的问题以及解决方法:
把使用语言设置为英文:系统设置----语言支持
# 自2015年开始一般会出现如下异常
/opt/jdk1.6.0_31/bin/java -Xmx896m -Xms128m -XX:PermSize=32m -XX:MaxPermSize=160m -jar /root/openjdk6/build/btjars/generatecurrencydata.jar -o /root/openjdk6/build/lib/currency.data.temp \
< ../../../src/share/classes/java/util/CurrencyData.properties
Error: time is more than 10 years from present: 1120165200000
java.lang.RuntimeException: time is more than 10 years from present: 1120165200000
at build.tools.generatecurrencydata.GenerateCurrencyData.makeSpecialCaseEntry(GenerateCurrencyData.java:285)
at build.tools.generatecurrencydata.GenerateCurrencyData.buildMainAndSpecialCaseTables(GenerateCurrencyData.java:225)
at build.tools.generatecurrencydata.GenerateCurrencyData.main(GenerateCurrencyData.java:154)
make[4]: *** [/root/openjdk6/build/lib/currency.data] Error 1
# 通过修改CurrencyData.properties文件, 把10年之前的时间修改为10年之内即可(把所有的时间格式的时间改为2015以前的十年以
内的年数)
# 部分amd64架构的机器可能会出现如下异常
cd linux_amd64_compiler2/product && ./test_gamma
java full version "1.6.0_36-b36"
./gamma: relocation error: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.36.x86_64/jre/lib/amd64/libjava.so: symbol JVM_FindClassFromCaller, version SUNWprivate_1.1 not defined in file libjvm.so with link time reference
# 主要是由于OpenJDK的一个bug导致的, 把Open JDK替换为Oracle JDK即可, 注意同时修改build.sh(就是</span><span style="font-family:Liberation Serif,serif;"><span style="font-size:18px;"><span lang="en-US">
export ALT_BOOTDIR=</span></span></span><span style="font-size:14px;">改为</span><span style="font-size:14px;">Oracle</span><span style="font-size:14px;">JDK的路径)中的内容,安装</span><span style="font-size:14px;">OracleJDK请参考其他网站(同时需要修改环境变量哦)
</span>