java8编译_真·手把手,从头教你编译JDK

本文详细介绍了如何在Centos7.6系统上从头编译JDK8,包括环境准备、安装必要组件、下载资源、执行编译以及使用自编译的JDK。在编译过程中可能会遇到的问题和解决方案也进行了说明,适合对JDK编译感兴趣的开发者参考。
摘要由CSDN通过智能技术生成

用JAVA作为开发工具的人都不会对JDK陌生,几乎天天都在用

其中有多少人真正编译过JDK呢?

估计是少之又少了

但是我们可能经常会遇到一些问题,现象奇特诡异,难以界定,但是如果能在JDK中做点儿手脚,也许就会让问题找到解决的方向

这篇文章,就是手把手教你怎么编译一个JDK

别光看,凡是都要自己动手做一遍

环境准备

我使用的环境是在虚拟机上安装的Centos7.6,纯净系统,其他啥都没装

查看说明

根据说明

d03ef2e89801

在这里插入图片描述

命令就两步

bash ./configure

make all

但是需要一些环境准备

d03ef2e89801

在这里插入图片描述

make版本有要求,要大于3.8.1,自己检查一下,centos7.6以上的肯定满足

d03ef2e89801

在这里插入图片描述

需要有一个Bootstrap JDK,需要7的,不能用8的,需要把bin加到path里面,这样就不用配置参数了

下载jdk7,tar形式的

jdk-7u80-linux-x64.tar.gz

解压

tar zxvf jdk-7u80-linux-x64.tar.gz

记下java的位置

/home/jdk/jdk1.7.0_80/bin

不着急加path,后面编译的时候用临时的就行了

有一个要注意

如果环境变量里面有JAVA_HOME,要去掉

d03ef2e89801

在这里插入图片描述

安装组件

查看组件

d03ef2e89801

在这里插入图片描述

需要这四个组件

search一下

yum search alsa freetype cups xrender

选择一部分安装

yum install alsa-lib alsa-lib-devel freetype-devel freetype cups cups-devel libXrender libXrender-devel

有很多教程里面说要安装ant

但实际上ant已经不需要了

Ant is no longer used when building the OpenJDK

安装完对版本

d03ef2e89801

在这里插入图片描述

d03ef2e89801

在这里插入图片描述

比要求的版本高就行

centos7.6通过yum安装的都能够达到要求

安装其他组件

d03ef2e89801

在这里插入图片描述

这里面说了这么多,实际上就安装下面这些就行

yum groupinstall "Development Tools"

yum install libXi libXi-devel libXtst-devel libXt-devel

下载资源

安装mercurial

然后下载源文件的资源获取工程(类似git的一个clone命令,这里面是编译的一些配置和资源获取文件,个头较小,clone之后再获取大的资源)

之后进入目录

yum install mercurial

hg clone http://hg.openjdk.java.net/jdk8u/jdk8u60 jdk8u60

cd jdk8u60

bash ./get_source.sh

然后泡个茶等着吧

这个过程中很容易失败

如果发现这样的提示

WARNING: jaxws exited abnormally (255)

WARNING: jdk exited abnormally (255)

那就再执行get_source吧

他只会下载没成功的几个组件,已经下载成功的是不会再下载的

如果卡住长时间不见动静,看一下带宽占用,如果也没有

那就用

ps aux|grep clone

把python的clone进程杀掉

get_source这边就会出现失败

再把失败的这几个的目录删掉

重新执行get_source就能够重下了

这部分可能会重复很多次,我至少重复了4,5次,jaxws jdk这两个始终下不下来

最终放弃了,jdk这个怎么也下不下来

直接用控制台上打印的clone的地址去浏览器访问

下zip包,再来解压缩吧

很快就下完了,之前重试这么多遍的我,简直就是傻子

执行编译

执行之前先把Bootstrap JDK加到环境变量中去

网上很多帖子在这一步会给configure增加很多参数,比如Bootstrap JDK的路径啊alsa的路径之类的,实际上如果是通过yum安装alsa这些依赖,并在path中增加了Bootstrap JDK的bin目录,这些都不用加

export PATH=/home/jdk/jdk1.7.0_80/bin:$PATH

java -version

bash ./configure --enable-debug --with-target-bits=64

d03ef2e89801

在这里插入图片描述

这样configure就算OK啦,最后提示的这个ccache可以不用管,是个编译加速的东西,没有也行,而且就算安装,也会发现yum里面找不到

OK,根据官网提示执行最后一步

make all

经过漫长的等待

中途出现无数warning,搞得人很焦虑啊

d03ef2e89801

在这里插入图片描述

编译完成啦

这里就完了吗?当然不是

接下来我们还要用啊

使用自己编译的JDK

images下面就是打好的包

j2sdk-image:JDK

j2re-image:JRE

进JDK看看,目录结构是不是很熟悉了

让我们用cp命令把jdk目录拷贝走

cp -r /home/jdk/jdk8u60/build/linux-x86_64-normal-server-fastdebug/images/j2sdk-image /home/jdk/openjdk-8u60-make

查看一下版本

/home/jdk/openjdk-8u60-make/bin/java -version

openjdk version "1.8.0-internal-fastdebug"

OpenJDK Runtime Environment (build 1.8.0-internal-fastdebug-root_2020_03_22_10_01-b00)

OpenJDK 64-Bit Server VM (build 25.60-b23-fastdebug, mixed mode)

接下来让我们验证

找一个java执行的,又比较复杂的,我选用metabase

去metabase的官网下载执行的jar

写一个run.sh

export MB_DB_TYPE=mysql

export MB_DB_DBNAME=metabase

export MB_DB_PORT=3306

export MB_DB_USER=账号

export MB_DB_PASS=密码

export MB_DB_HOST=mysql所在机器

/home/jdk/openjdk-8u60-make/bin/java -jar metabase.jar

执行起来

中间一个小插曲,metabase最后初始化数据库连接的时候没有成功,提示

Timed out after 5.0 s

这个问题搞得好恼火,一直没有解决,关防火墙也不管用,换成Oracle的JDK也不行,看来应该是我创建虚拟机的时候把网络的什么东西设置坏了,先放在一边吧

从已经执行的日志看,编译的jdk是能够顺利运行的

d03ef2e89801

在这里插入图片描述

恭喜,至此终于编译成功

可以打包拿去用了

d03ef2e89801

欢迎关注公众号,共同交流,共同进步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值