[Linux] JDK 编译装置
概述
咱们在java开发时根本会应用Oracle或者一些权威的开源组织提供的JDK,很少应用本人编译的版本.
然而如果你想学习JVM或者本人做一些非凡的用处,本人会编译JDK是有必要学习的.
环境
Name | Version | Arch | is required |
---|---|---|---|
Cent OS | 8.2+ LTS | X64 | Yes |
Bootstrap JDK | 14 | X64 | Yes |
Target JDK | 15 | X64 | Yes,下载 |
gcc | 8.3.1 | X64 | Yes,下载 |
make | 4.2.1 | X64 | Yes |
本文编译的指标JDK版本为15,他须要的Bootstrap JDK版本为14
JDK源码编译是须要一个叫做Bootstrap JDK的java环境的,因为JDK自身有相当大的一部分是java编写的.
此外一个根本的常识是Bootstrap JDK的版本要是你编译的指标JDK的版本前一个主版本,例如我想编译JDK15那么最佳的Bootstrap JDK是JDK14. 也就是说Target JDK=N,那么N-1是最佳举荐的Bootstrap JDK版本
装置
装置前请依照如下依赖,因为我的零碎是CentOS,那么我只记录本人的须要装置的必要的根底依赖
如果你的编译环境不一样,请自行看: https://github.com/openjdk/jdk/blob/master/doc/building.md
[root@skyfucker bin]# sudo yum groupinstall "Development Tools" -y[root@skyfucker bin]# sudo yum install freetype-devel -y[root@skyfucker bin]# sudo yum install cups-devel -y[root@skyfucker bin]# sudo yum install libXtst-devel libXt-devel libXrender-devel libXrandr-devel libXi-devel -y[root@skyfucker bin]# sudo yum install alsa-lib-devel -y[root@skyfucker bin]# sudo yum install libffi-devel -y[root@skyfucker bin]# sudo yum install libffi-devel -y[root@skyfucker bin]# dnf install vim gcc gcc-c++ -y[root@skyfucker bin]# dnf install make -y[root@skyfucker thinktik]# sudo yum install fontconfig-devel -y
下面的根底依赖装置实现后,下载jdk15的源码而后进行编译
[thinktik@skyfucker ~]$ lsjdk14 jdk-jdk-15-ga.zip openjdk-14.0.2_linux-x64_bin.tar.gz# 解压源码[thinktik@skyfucker ~]$ unzip jdk-jdk-15-ga.zip [thinktik@skyfucker ~]$ lsjdk14 jdk-jdk-15-ga jdk-jdk-15-ga.zip openjdk-14.0.2_linux-x64_bin.tar.gz# 进入解压后的文件夹[thinktik@skyfucker ~]$ cd jdk-jdk-15-ga[thinktik@skyfucker jdk-jdk-15-ga]$ lsADDITIONAL_LICENSE_INFO ASSEMBLY_EXCEPTION bin configure doc LICENSE make Makefile README src test# 指定为编译server版本debug模式的JDK,并指定Bootstrap JDK的装置门路[thinktik@skyfucker jdk-jdk-15-ga]$ bash configure --enable-debug --with-jvm-variants=server --enable-debug --with-boot-jdk=/home/thinktik/jdk14/
失常状况下会输入这些提示信息,示意configure查看实现,能够编译
文字信息如下
checking for ccache... nochecking if ccache is available... no, ccache binary missing or not executablechecking if ccache is enabled... disabled, defaultchecking if build directory is on local disk... yesconfigure: creating /home/thinktik/jdk-jdk-15-ga/build/linux-x86_64-server-fastdebug/configure-support/config.statusconfig.status: creating /home/thinktik/jdk-jdk-15-ga/build/linux-x86_64-server-fastdebug/spec.gmkconfig.status: creating /home/thinktik/jdk-jdk-15-ga/build/linux-x86_64-server-fastdebug/bootcycle-spec.gmkconfig.status: creating /home/thinktik/jdk-jdk-15-ga/build/linux-x86_64-server-fastdebug/buildjdk-spec.gmkconfig.status: creating /home/thinktik/jdk-jdk-15-ga/build/linux-x86_64-server-fastdebug/compare.shconfig.status: creating /home/thinktik/jdk-jdk-15-ga/build/linux-x86_64-server-fastdebug/Makefile====================================================A new configuration has been successfully created in/home/thinktik/jdk-jdk-15-ga/build/linux-x86_64-server-fastdebugusing configure arguments '--enable-debug --with-jvm-variants=server --enable-debug --with-boot-jdk=/home/thinktik/jdk14/'.Configuration summary:* Debug level: fastdebug* HS debug level: fastdebug* JVM variants: server* JVM features: server: 'aot cds compiler1 compiler2 epsilongc g1gc graal jfr jni-check jvmci jvmti management nmt parallelgc serialgc services shenandoahgc vm-structs zgc' * OpenJDK target: OS: linux, CPU architecture: x86, address length: 64* Version string: 15-internal+0-adhoc.thinktik.jdk-jdk-15-ga (15-internal)Tools summary:* Boot JDK: openjdk version "14.0.2" 2020-07-14 OpenJDK Runtime Environment (build 14.0.2+12-46) OpenJDK 64-Bit Server VM (build 14.0.2+12-46, mixed mode, sharing) (at /home/thinktik/jdk14)* Toolchain: gcc (GNU Compiler Collection)* C Compiler: Version 8.3.1 (at /usr/bin/gcc)* C++ Compiler: Version 8.3.1 (at /usr/bin/g++)Build performance summary:* Cores to use: 4* Memory limit: 7809 MB[thinktik@skyfucker jdk-jdk-15-ga]$
进行编译
[thinktik@skyfucker jdk-jdk-15-ga]$ make
急躁期待,当输入如下的内容的时候示意编译失常实现
Creating support/modules_libs/jdk.security.auth/libjaas.so from 1 file(s)Compiling 4 files for BUILD_JIGSAW_TOOLSOptimizing the exploded imageStopping sjavac serverFinished building target 'default (exploded-image)' in configuration 'linux-x86_64-server-fastdebug'[thinktik@skyfucker jdk-jdk-15-ga]$ lsADDITIONAL_LICENSE_INFO ASSEMBLY_EXCEPTION bin build configure doc LICENSE make Makefile README src test[thinktik@skyfucker jdk-jdk-15-ga]$ cd build/[thinktik@skyfucker build]$ ls
编译出的jdk寄存在以后文件夹下的build文件夹下,你能够逐级查找并容许编译后的java可执行文件
个别本人编译出的jdk会带上linux的用户名,通知编译者这是本人编译的版本
如果你查看后编译出的程序失常,那么就能够编译为镜像应用了
[thinktik@skyfucker jdk-jdk-15-ga]$ make images
寄存在images目录下
本文原创链接:
- Linux ELK 装置(服务器架设篇)
参考链接
- https://github.com/openjdk/jdk
- http://jdk.java.net/
- http://openjdk.java.net/
- https://github.com/openjdk/jdk/blob/master/doc/building.md