[Linux] JDK 编译安装

概述

我们在java开发时基本会使用Oracle或者一些权威的开源组织提供的JDK,很少使用自己编译的版本.

但是如果你想学习JVM或者自己做一些特殊的用途,自己会编译JDK是有必要学习的.

环境NameVersionArchis requiredCent OS8.2+ LTSX64Yes

Bootstrap JDK14X64Yes

Target JDK15X64Yes,下载

gcc8.3.1X64Yes,下载

make4.2.1X64Yes

本文编译的目标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目录下

本文原创链接:

参考链接

java写dnf外掛_Linux JDK 编译安装相关推荐

  1. java写dnf外掛_dnf卡盟_Java的泛型详解(一)

    Java实现DDD中UnitOfWorkdnf卡盟 Java的泛型详解 泛型的利益 编写的代码可以被差别类型的工具所重用. 由于上面的一个优点,泛型也可以削减代码的编写. 泛型的使用 简朴泛型类 pu ...

  2. java写dnf外掛_CentOS 7 安装和使用DNF

    DNF新一代的RPM软件包管理器.他首先出现在 Fedora 18 这个发行版中.而最近,他取代了YUM,正式成为 Fedora 22 的包管理器. DNF包管理器克服了YUM包管理器的一些瓶颈,提升 ...

  3. java 第一弹:最新Oracle JDK 下载安装与配置环境变量

    java 第一弹:最新Oracle JDK 下载安装与配置环境变量 1.下载网站甲骨文官网https://www.oracle.com/java/technologies/javase-downloa ...

  4. 13.Centos软件包管理(rpm,yum,dnf),源码编译安装

    基础知识 软件运行和编译 ABI:Application Binary Interface Windows与Linux不兼容 ELF(Executable and Linkable Format) P ...

  5. java语言jdk_Java语言环境(JDK的安装教学)

    //此文档由徐浩军编写(32/64位系统都适用) 1.下载JDK安装包你 2.点击安装包开始安装 3.首先你要选择安装地址一般情况下,都会选择默认地址. (请记住这个地址,之后配置环境变量的时候需要用 ...

  6. wxwidget编译安装_linux下编译安装wxWidgets-2.8.12和audacity-2.0.3教程

    原创内容,转载请注明出处:https://www.myzhenai.com/thread-15778-1-1.html https://www.myzhenai.com.cn/post/1247.ht ...

  7. linux php 编译安装_linux下编译安装配置php5.6.30过程

    在第一次编译安装php5.6.30失败后,参考了http://www.phpworld.cn/system/php/11.html的一些内容,第二次编译安装成功,特此记录过程. 一.编译安装php5. ...

  8. java写一个外网访问的接口_Java程序员如何入门?教你写第一个程序

    大家都知道,Java是一门面向对象的编程语言,不仅吸收了C++的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大.简单易用. 另外,Java允许程序员以优雅的思维方 ...

  9. java写一个外网访问的接口_【JAVA基础】一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(中篇)...

    0 前言 初学JAVA时,总会对一些概念一知半解,相互混淆,不明其设计的用意,如类.对象.重载.封装.继承.多态.覆盖.抽象类.接口概念.为便于理解和巩固,本文将基于一个案例及其变形,展现各个概念的定 ...

最新文章

  1. 63.不同的路径II
  2. Linux_用户权限管理
  3. Unity Game Starter Kit for Windows Store and Windows Phone Store games
  4. 计算机 密码学 实验一,计算机网络安全技术-实验一-密码学基础
  5. boost::math::boost::math::interpolators::cardinal_cubic_b_spline用法的测试程序
  6. 【机器视觉】 dev_set_color算子
  7. 基于移动最小二乘的图像变形
  8. android listview刷新数据库,android – 如何在数据库更改后刷新ListView?
  9. mysql数据库的设计工具_MySQL Workbench,专为MySQL设计的数据库建模工具
  10. 不卡顿成用户购机第一要素,Mate 9深得人心
  11. 《计算机科学导论》学习笔记
  12. 360加固签名验证_360加固助手签名工具怎么用
  13. 迪赛智慧数——折线图(渐变堆叠图):近十年母亲节消费趋势
  14. 韩式时尚大片《九月风》(出镜:马晓辉/徐嘉依)
  15. 我们已经开发好了Magento的Ctopay(收汇宝)非3D网关
  16. 论成长型思维的重要性
  17. 软件加入使用时间_【安卓】换了这么多影视软件,还是这个老牌站点最靠谱
  18. 论文阅读 (二十三):Attention-based Deep Multiple Instance Learning (2018)
  19. 项目优化:当使用redis减少数据库压力时,遇到redis写入失败,造成读取数据问题的解决方案
  20. 自媒体有什么副业?做自媒体有哪些变现方式

热门文章

  1. 了解RISC-V指令集架构
  2. 2021上海燕窝、滋补品展浅谈中医对燕窝的研究:这6种情况吃燕窝,效果显著
  3. java自定义findbugs规则_FindBugs规则整理
  4. 10亿次+消息、40亿次+总请求丨以58帮帮为例看58同城典型技术架构演变
  5. Algorithm Review 3 数论
  6. poi设置背景颜色不起作用setFillForegroundColor
  7. kubernetes的PKI证书
  8. 酷派android系统怎么关闭,酷派手机系统重装步骤和注意事项
  9. VS终结者即Breeze's Terminator V1.0 测试版发布【紧急修复】
  10. linux网卡名字 mac,linux下编程如何获得所有网卡的信息-包括网卡名字,网卡MAC等等......