Ubuntu16.04虚拟机编译openJDK9
-
环境准备
配置虚拟机环境在此就不在多说,相信各位肯定都会,但有一个坑:虚拟机的内存必须设置的大一点(至少设置为2G,不然编译的时候会报错)。我的虚拟机配置如下:
虚拟机配置
如果虚拟机准备好了,那么就进行下一步。
-
OpenJDK下载
获取JDK有两种方式,先说简单的吧:
1、github
直接使用Github上的源代码镜像
$ git clone https://github.com/dmlloyd/openjdk
2、通过Mercurial代码管理工具下载
首先下载Mercurial管理工具,运行:
$ apt-get install mercurial
然后去OpenJDK官网:OpenJDK Mercurial Repositories
找到如下:
记住地址,随后执行:
$ hg clone http://hg.openjdk.java.net/jdk9/jdk9/
下载完成后,进入下载的文件夹,里面有一个
get_source.sh
赋予可执行权限并执行
$ chmod +x get_source.sh
$ ./get_source.sh
耐心等待,下载完成的文件夹长这样
下载完成的文件
-
构建
configue
在构建之前建议仔细阅读源代码目录下的 README-builds.html or README-builds.md 文件
在阅读的过程中发现编译JDK需要指定一个Bootstrap JDK,因为OpenJDK的各个组成部分有的是用C++编写的,更多的代码则是使用Java自身实现的。所以需要去JDK官网下载一份JDK:Java SE - Downloads | Oracle Technology Network | Oracle
下载并解压完成后不建议指定JAVA_HOME
和CLASSPATH
,
如果设置了环境变量,可以取消:
unset JAVA_HOME
unset CLASSPATH
回到OpenJDK目录下,执行:
$ chmod +x configure
$ sudo ./configure --with-boot-jdk=解压后的oracleJDK路径
在执行过程中会报缺少环境的错误,按照系统给出的提示进行安装就好
configure完成后会输出:
Configuration summary:
* Debug level: release
* HS debug level: product
* JDK variant: normal
* JVM variants: server
* OpenJDK target: OS: linux, CPU architecture: x86, address length: 64
* Version string: 10-internal+0-adhoc.root.openjdk (10-internal)
Tools summary:
* Boot JDK: java version "9.0.4" Java(TM) SE Runtime Environment (build 9.0.4+11) Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
* Toolchain: gcc (GNU Compiler Collection)
* C Compiler: Version 5.4.0 (at /usr/bin/gcc)
* C++ Compiler: Version 5.4.0 (at /usr/bin/g++)
Build performance summary:
* Cores to use: 1
* Memory limit: 1970 MB
make
随后执行make
耐心等待后将输出:
Finished building target 'default (exploded-image)' in configuration
'linux-x86_64-normal-server-release'
此时在OpenJDK的目录下的build
子目录下将产生一个linux-x86_64-normal-server-release
文件夹
验证
进入到生成的文件夹下的jdk/bin
目录下,执行./java -version
将输出
openjdk version "10-internal" 2018-03-20
OpenJDK Runtime Environment (build 10-internal+0-adhoc.root.openjdk)
OpenJDK 64-Bit Server VM (build 10-internal+0-adhoc.root.openjdk, mixed mode)
至此说明我们编译JDK成功。