编译openjdk

1. 下载openjdk源码

openjdk的官网是OpenJDK (java.net)

在网站左侧就能看到它的源码位置的链接

从图上可以看到,它的源码在两个位置有托管,Mercurial、GitHub这两个网站都有。我们点击GitHub,进去到它GitHub的位置。

上图第一个就是openjdk的仓库地址了 。

选择HTTPS,复制地址。

下一步,登录码云(没账号的可以先创建一个),在边上有个+的图标,点开就可以看到二级菜单有个从GitHub/GitLab导入仓库

上面Git仓库URL,填入从GitHub复制的地址,https://github.com/openjdk/jdk.git ,仓库名字可以自己写一个。完了之后点击导入,就可以将openjdk的源码导入到码云上来,导入后和GitHub就都是一样的。

选择导入GitHub仓库的话,可以关联自己的GitHub账号,把自己GitHub的仓库也导入过来。

最后,我们就可以从码云上下载openjdk的源码了,再也不是龟速了。我本地下载6MB/s,不到1分钟就下载完成了。

我本次选的是jdk-11+25这个分支。

我本地下载下来的是openjdk-jdk-11+25.zip

2. 环境准备

  1. 需要一个linux(windows也可以,不过好像比较麻烦,我没试过。我本次是用Linux)环境。我是虚拟机安装的CentOS7。具体的版本号如下图

  1. 根据阿里云设置下软件镜像源。centos镜像-centos下载地址-centos安装教程-阿里巴巴开源镜像站 (aliyun.com)

  2. 在环境中安装jdk并设置环境变量(不用卸载系统自带的JDK,直接可以使用压缩版的jdk解压后,设置相关的环境变量就可以)。

     vim ~/.bashrc
    
    #在~/.bashrc中添加下面java环境变量
    JAVA_HOME=/root/openjdk/jdk-11.0.10 #java目录
    CLASSPATH=$JAVA_HOME/lib
    PATH=$JAVA_HOME/bin:$PATH
    export PATH JAVA_HOME CLASSPATH source ~/.bashrc #使环境变量生效

    jdk的版本不能小于要编译的jdk版本-1,这个在编译指导中有写,具体自己看吧。

我本次使用的是jdk11,具体的版本号是如下图。

4.将下载的openjdk的源码的压缩包(我本次的压缩包是openjdk-jdk-11+25.zip)上传到CentOS7服务器上,后续所有的工作就都在CentOS7上执行了。


到这里,所有的准备工作就完成了,下一步就开始编译openjdk了。

3. 编译openjdk

  1. 首先在shell中输入java -version,确实当前默认的java就是我们自己安装的。

  2. 解压上传的openjdk源码压缩包。

    yum install zip unzip  #安装解压缩软件
    unzip openjdk-jdk-11+25.zip #解压openjdk源码包
  3. 源码包中有个README,打开可以看到编译的帮助文档是在doc目录下的building文件。上面2.3中的需要的jdk的版本也是在这个building的帮助文档里。

  1. 编译openjdk使用make来完成的,所以需要先安装make(很多服务器都是自带make的,如果自带了,那就不用再安装了.)。

    yum install make  #安装make,我本次用的CentOS就自带了
  2. 下一步就是根据building中的指导来编译了。

    bash ./configure --help 这个命令可以来查看各种编译选项。

    bash ./configure --with-debug-level=slowdebug  --with-target-bits=64
    make

    我本次就是使用上面两行命令来编译的。


    编译过程中需要的软件也不必提前安装,安装过程中如果发现缺软件,会有提示。如下图,根据提示安装相关软件就可以了。

    下面就是我本地实际安装的软件了。都是根据错误提示安装的。

    sudo yum install libXtst-devel libXt-devel libXrender-devel libXi-devel
    sudo yum install cups-devel
    sudo yum install fontconfig-devel
    sudo yum install alsa-lib-devel

​ configuration成功的话,会有如下图

​ make成功的话会有如下图

  1. 如果编译成功,会在build/linux-x86_64-normal-server-slowdebug/jdk这个目录下生成我们编译的openjdk。

    执行如下命令,验证我们的编译结果。

    cd build/linux-x86_64-normal-server-slowdebug/jdk
    cd bin
    ./java -version


到这里,整个openjdk的编译就结束了。

CentOS编译openjdk的更多相关文章

  1. CentOS 编译 openjdk

    1. 概述 <<深入理解Java虚拟机--JVM高级特性与最佳实践>>第一章就谈到自己编译jdk,来吧. 2.  编译环境 VMware12 CentOS-7-x86_64-E ...

  2. Linux CentOS 6.9 Minimal 编译 OpenJDK 7

    今天学习<深入理解Java虚拟机:JVM高级特性与最佳实践>一书,并动手在Linux系统上编译OpenJDK 7,初次搞不太顺利,特记录下编译操作细节. 一.前期准备 约定:工具默认安装目 ...

  3. JVM学习——编译OpenJDK

    最近在学习<深入理解java虚拟机 第二版>这本书.书中第一部分建议大家自己编译OpenJDK.抱着学习态度也来编译个玩一玩.下面进入正题. 1.编译环境介绍 操作系统 CentOS Li ...

  4. CentOS编译安装NodeJS+Express

    NodeJS是基于Chrome’s Javascript runtime,也就是Google V8引擎执行Javascript的快速构建网络服务及应用的平台,其优点有: 在CentOS编译安装Node ...

  5. Centos编译安装PHP 5.5笔记

    本篇是在 Centos 6.4 32bit 下编译安装 php 5.5.5 的笔记,接上篇 Centos编译安装Apache 2.4.6笔记.php 5.5.x 和 centos 源里面的 php 5 ...

  6. 深入理解JVM(一)编译openJDK

    此文总结的很不错:https://www.cnblogs.com/ACFLOOD/p/5528035.html 准备openJDK源码和环境 1.在linux和macOS上编译openJDK更加友好, ...

  7. 走进JVM之一 自己编译openjdk源码

    想要深入了解JVM,就必须了解其实现机制.了解JVM实现的最好方法便是自己动手编译JDK.好了,让我们开始吧! 1.  准备工作 获取OpenJDK源码 本次编译选择的是OpenJDK7u,官方源码包 ...

  8. Mac上编译OpenJDK过程记录

    编译OpenJDK主要为了学习HotSpot,编译过程在很多相关书籍中都有所涉及,但由于机型.机子具体环境的不同,很难有资料能够一步到位.还是得碰到具体问题通过上网查来一个个解决. 下载OpenJDK ...

  9. CentOS 编译 GCC 7.2

    CentOS 编译 GCC 7.2 下载源码 wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-7.2.0/gcc-7.2.0. ...

随机推荐

  1. YouTube爬虫下载

    最近在想用爬虫写youtube网站下载学习视频,找了好多资料也没有有个有用的. 真不容易找到几行代码,代码实现很简单,基于youtube_dl 来之不易,仅参考 from __future__ imp ...

  2. Coursera Deep Learning笔记 改善深层神经网络:超参数调试 Batch归一化 Softmax

    摘抄:https://xienaoban.github.io/posts/2106.html 1. 调试(Tuning) 超参数 取值 #学习速率:\(\alpha\) Momentum:\(\bet ...

  3. 【二食堂】Alpha - Scrum Meeting 7

    Scrum Meeting 7 例会时间:4.17 11:40 - 12:00 进度情况 组员 昨日进度 今日任务 李健 1. 继续文本区域的开发,先完成目前简陋的添加方式,再区实现勾选功能issue ...

  4. Noip模拟37 2021.8.12

    T1 数列 真是考场上不是数学的乱推柿子,想定理,是数学的没想出来.. 比较悲伤... 列柿子不用动脑子,就是没有想出来$EXgcd$解不定方程,淦.. 解处一组解后利用比较显然的性质: $x+\fr ...

  5. Noip模拟8 2021.6.17

    T1 星际旅行 仔细一看,发现像一个欧拉路(简称一笔画). 满足"可以一笔画"的条件是: 1.所有点都有偶数条连边; 2.有偶数个点连奇数条边; 满足以上两个条件的任意一个即可一笔 ...

  6. Linux基础是零基础必须要过的关,你懂了多少

    #LINUX基础学习 ##命令行下的基础知识 Linux区分英文的大小写. date :查看时间 cal:查看日历 [Tab] 热键 :可以自动补全命令名和文件名 [Ctrl]+C 热键 :可以中断正 ...

  7. 15个问题自查你真的了解java编译优化吗?

    摘要:为什么C++的编译速度会比java慢很多?二者运行程序的速度差异在哪? 了解了java的早期和晚期过程,就能理解这个问题了. 本文分享自华为云社区<你真的了解java编译优化吗?15个问题 ...

  8. 用Python去除PDF水印

    今天介绍下用 Python 去除 PDF (图片)的水印.思路很简单,代码也很简洁. 首先来考虑 Python 如何去除图片的水印,然后再将思路复用到 PDF 上面. 这张图片是前几天整理<数据 ...

  9. jquery正则表达式验证【是否带有小数、是否中文名称组成、是否全由8位数字组成、电话码格式、邮件地址】

    1 <form name="myform" action="" onsubmit="return fun1()"> 2 < ...

  10. nod_1009 数字1的数量(分析题)

    题意: 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数. 例如:n = 12,包含了5个1.1,10,12共包含3个1,11包含2个1,总共5个1. Input 输入 ...