乐趣区

关于java:Linux-JDK-编译安装

[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 ~]$ ls
jdk14  jdk-jdk-15-ga.zip  openjdk-14.0.2_linux-x64_bin.tar.gz
# 解压源码
[thinktik@skyfucker ~]$ unzip jdk-jdk-15-ga.zip 
[thinktik@skyfucker ~]$ ls
jdk14  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]$ ls
ADDITIONAL_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... no
checking if ccache is available... no, ccache binary missing or not executable
checking if ccache is enabled... disabled, default
checking if build directory is on local disk... yes
configure: creating /home/thinktik/jdk-jdk-15-ga/build/linux-x86_64-server-fastdebug/configure-support/config.status
config.status: creating /home/thinktik/jdk-jdk-15-ga/build/linux-x86_64-server-fastdebug/spec.gmk
config.status: creating /home/thinktik/jdk-jdk-15-ga/build/linux-x86_64-server-fastdebug/bootcycle-spec.gmk
config.status: creating /home/thinktik/jdk-jdk-15-ga/build/linux-x86_64-server-fastdebug/buildjdk-spec.gmk
config.status: creating /home/thinktik/jdk-jdk-15-ga/build/linux-x86_64-server-fastdebug/compare.sh
config.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-fastdebug
using 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_TOOLS
Optimizing the exploded image
Stopping sjavac server
Finished building target 'default (exploded-image)' in configuration 'linux-x86_64-server-fastdebug'
[thinktik@skyfucker jdk-jdk-15-ga]$ ls
ADDITIONAL_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
退出移动版