一.为什么编译OpenJDK?
因为这样可以自己对JDK做一些操作,比如加注释什么的
或者对JVM进行调试
二.如何编译
1.配置环境
Ubuntu 版本 16.06
因为OpenJDK有些代码是有些基于C++,大部分是Java写的,所以需要一个JDK去编译这 些由Java所写的地方,这JDK官方称为Bootstrap JDK,我们要编译OpenJDK8 那就要使用JDK7为Bootstrap JDK
安装Bootstrap JDK
首先看你们的系统有无JDK7,看是不是JDK7,如果不是直接删除装JDK7
安装jdk相关操作
1. tar -zxvf jdk-7u80-linux-x64.tar -C /usr/local/java/jdk1.7.0_80
2. sudo gedit /etc/profile
向profile文件末尾添加
JAVA_HOME=/usr/local/lib/jdk解压目录
CLASSPATH=.:$JAVA_HOME/bin.tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
3. source /etc/profile
4. java -version
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
OpenJDK8 如何下载 ?
可以去 OpenJDK,不过我是在码云上下的,直接搜openjdk8然后找一个下载即可.
1.在OpenJDK根目录创建一个脚本文件 build.sh
内容如下
#!/bin/bash
#设置语言
export LANG=C
#指定 Bootstrap JDK的安装目录
export ALT_BOOTDIR=/usr/local/java/jdk1.7.0_80/
#允许自动下载依赖包
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=/desktop/my/openjdk8/build
unset CLASSPATH
unset JAVA_HOME
make all
make 降版本
需要make版本为3.81的但是 Ubuntu 版本 16.06 的make版本为4.1
make下载地址
1. tar -xjvf make-3.81.tar.bz2
2. 进入解压目录
3. ./configure --prefix=/usr/local/make-3.81
4. sh build.sh
5. sudo cp make /usr/bin/make
6. make -v
2.开始编译
位置openjdk的根目录
1. sh configure
这一步会提醒你缺少什么东西缺啥装啥,如果报软件没有找到就更新一下源 sudo apt-get update
2. ./build.sh
3.验证是否成功
cd build/linux-x86_64-normal-server-slowdebug/images/j2sdk-image/bin/
./java -version
4.可能遇到的问题
1.ERROR:××× recipe for target ‘check_os_version’ failed ×××
分析:./hotspot/make/linux/Makefile:226-240
添加对应的内核版本SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3% 4%
2…ebugger/win32/coff/COFFFileParser
C
O
F
F
F
i
l
e
I
m
p
l
COFFFileImpl
COFFFileImplCOFFHeaderImpl$OptionalHeaderImpl$1.class (File name too long)
不要将openjdk在共享文件中解压和存放编译结果
3.中文问题 error: unmappable character for encoding ASCII
修改 /hotspot/make/linux/makefiles/rules.make
JAVAC_FLAGS = -g -encoding UTF-8
修改 jdk/make/Setup.gmk
-encoding ascii 为 -encoding UTF-8
这部分百度不到 openjdk8里面添加中文注释然后编译失败,上面是我瞎搞的,不过可以解决因为中文的问题而导致编译失败
首先因为openjdk8其实已经很老了,你用很新的系统去编译一个很老的东西,会出现很多兼容性问题
编译了一个星期linux系统都玩坏了好几个
欢迎关注公众号
参考:
深入理解Java虚拟机
https://blog.csdn.net/swif_N_F/article/details/79109136