JAVA虚拟机学习入门---OpenJDK的编译(Deepin15版本)
Tofloor
poster avatar
177******80
deepin
2017-12-19 07:56
Author
本帖最后由 sksweet 于 2017-12-20 13:16 编辑

  1年前在ubuntu 14.04上编译成功了jdk1.8,前不久换了deepin 15来用,jdk源代码运行环境都没有了,只能重新搞过。因为,deepin15及ubuntu 16.10这种高版本用ubuntu 14.04这种低版本编译方法会出现各种问题,特别有个别依赖问题只有deepin15/Debian高版本系列才会有,特此总结一下,供在deepin系统上以Java为业的网友做学习提高之用。

OpenJDK的编译分为四部分:1 下载源代码,2 编译环境准备,3 高版本Linux问题处理 4 编译

一 下载源代码
  1年前的话,我是直接到openJdk网站 http://download.java.net/openjdk/jdk8/ 去下载打包好的源代码包,结果今天再去看的话,下载链接还是哪个,但点进去,已经被oracle这个货给和谐了。所以,决定使用官方第二种方式,hg下载,类似git的下载方式,下载Jdk8的源代码,方法如下:
  1. 代码:
  2. $sudo apt-get install mercurial -y
  3. $hg clone http://hg.openjdk.java.net/jdk8u/jdk8u/  
  4. $cd jdk8u
  5. $sh get_source.sh  
Copy the Code
这里会正式下载每个包的源代码,大概是800多M,速度并不慢,看各位的网速吧。

二 编译环境的准备
1) 设置环境变量
    首先,要说一下,构建openJDK要一个药引,这个药引叫boot jdk,这个工具一般已经集成在普通的jdk中了,所以,在这之前一定要安装一个普通的JDK7到系统上(不能比jdk8高,也不能太低,只能是低一个版本,java的二进制包安装方法,在deepin论坛我已经看到有3位以上的网友介绍过了,这里就不介绍了。~题外话,当今的编程语言版本基本都是用自家的低版本去编译出来的),然后继续在自家根目录.bashrc里边添加以下变量。
  1. 代码:
  2. #build openjdk option
  3. export SKIP_DEBUG_BUILD=false
  4. export SKIP_FASTDEBUG_BUILD=true
  5. export DEBUG_NAME=debug
  6. export LANG=C
  7. export ALLOW_DOWNLOADS=true
  8. export USE_PRECOMPILED_HEADER=true

  9. export BUILD_LANGTOOLS=true
  10. export BUILD_JAXP=true
  11. export BUILD_JAXWS=true
  12. export BUILD_CORBA=true
  13. export BUILD_HOSTPOT=true
  14. export BUILD_JDK=true
  15. BUILD_DEPLOY=false
  16. unset CLASSPATH
  17. unset JAVA_HOME
Copy the Code

2)配置编译环境
  1. 代码:
  2. $cd jdk8u{jdk源代码根目录}
  3. $sh configure 或者 bash configure
Copy the Code
该过程会检测构建环境是否符合要求,如有问题,它会给出提示。下面先给出我碰到的要安装的库文件:
  1. 代码:
  2. $sudo apt-get install libxext-dev libxrender-dev libxtst-dev libxt-dev
  3. $sudo apt-get install libcups2-dev
  4. $sudo apt-get install libfreetype6-dev
  5. $sudo apt-get install build-essential   
  6. $sudo apt-get install ant
  7. $sudo apt-get install xorg-dev
Copy the Code
后面可能,大部分还有继续安装的缺失的工具,都可以通过提示apt安装即可。说一下deepin15/debian没有的库文件安装:
libX11-dev,这个库是没有的预装的,库里也没记录。上网到debian库找,
debian库总地址,以后大家缺少包都可以上debian库里找。
https://www.debian.org/distrib/packages
libX11-dev地址:
http://mirrors.ustc.edu.cn/debian/pool/main/libx/libx11/libx11-dev_1.6.4-3_amd64.deb
  1. 下载后安装
  2. $sudo dpkg -i libx11-dev_1.6.4-3_amd64.deb
Copy the Code

三 高版本Linux问题处理
  在上面sh configure命令检查机制跑通后,即无error信息后,就可以处理高版本Linux编译环境的问题。
  1. 代码
  2. $cd cd jdk8u{jdk源代码根目录}
  3. $gedit ./hotspot/make/linux/makefiles/gcc.make
Copy the Code
查找一个字段WARNINGS_ARE_ERRORS = -Werror,找到后,把它注释掉,不然编译会中断报错。

四 编译
  因为高版本的gcc不再支持stabs,make下要加点参数(DEBUG_BINARIES=true),同时在运行时,可能出现问题,最好把错误日志打印出来。
  1. 代码
  2. $make all DEBUG_BINARIES=true 2>&1 |tee build.log
Copy the Code
接下来就是20多分钟的等待,编译出来的build文件有3.3G大小,还是挺大的。

后记:
   想在Windows下尝试编译jdk源代码的程序员网友可以试试以下方法,全网只有这两个下面位分享了方法,而且第二位是参考第一位的,一定要安装vs201X,因为要用到它的C++编译器,过程真的比Linux下复杂N倍。
https://www.cnblogs.com/lighten/p/5906359.html
http://www.jianshu.com/p/e85f93cc74cb

ps:
目前Deepin库里已经没有Java7的二进制包了,安装Java7二进制包方法有两种:

安装方法一:
先加源,后apt安装,加源的方法也有两种,选其一就可以了。
加源的方法1:
  1. $sudo apt-get install python-software-properties
  2. $sudo apt-get install software-properties-common
  3. $sudo apt-get update
  4. $sudo add-apt-repository ppa:openjdk-r/ppa
  5. $sudo apt-get update
Copy the Code
加源的方法2:
  1. $sudo gedit /etc/apt/sources.list
Copy the Code
加入如下两行,
  1. deb http://ppa.launchpad.net/openjdk-r/ppa/ubuntu xenial main
  2. deb-src http://ppa.launchpad.net/openjdk-r/ppa/ubuntu xenial main

  3. 然后保存,更新
  4. $sudo apt-get update  
Copy the Code
ok添加完毕,安装:
  1. $sudo apt-get install openjdk-7-jdk
Copy the Code
已经安装了java8或者9的网友,可以在安装openjdk7后,使用如下命令进行java版本的自行切换:
  1. sudo update-alternatives --config java
  2. sudo update-alternatives --config javac
Copy the Code
在home目录下的.bashrc里边配置Java路径:
  1. export LC_ALL=C          //高linux版本必开
  2. export USE_CCACHE=1      //使用CCACHE加速编译
  3. export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/
  4. export JRE_HOME=${JAVA_HOME}/jre
  5. export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
  6. export PATH=${JAVA_HOME}/bin:$PATH
Copy the Code
安装方法二:
没试过,一种新型的安装多版本Java的框架。
http://sdkman.io/install.html



Enjoy~

附图:

Reply Favorite View the author
All Replies
avatar
Feelup
deepin
2017-12-20 18:49
#1
“java的二进制包安装方法,在deepin论坛我已经看到有3位以上的网友介绍过了,这里就不介绍了”
(这里还需要安装Java的二进制包吗?)
楼主,关于这个也介绍一下吧(完善到上面的文档中)。第一次配Java,完全不知道怎么弄。谢谢
Reply View the author
avatar
177******80
deepin
2017-12-20 21:19
#2
https://bbs.deepin.org/post/150381
“java的二进制包安装方法,在deepin论坛我已经看到有3位以上的网友介绍过了,这里就不介绍了”
(这里还需 ...

好的,在文章最后我添加了。一定要先安装Java7的二进制包,用Java7去编译Java8的源代码,才能生成Java8的二进制包,目前好多高级语言的二进制版本都是这么生成的,用低版本编译生成高版本。
Reply View the author
avatar
Feelup
deepin
2017-12-21 01:16
#3
https://bbs.deepin.org/post/150381
好的,在文章最后我添加了。一定要先安装Java7的二进制包,用Java7去编译Java8的源代码,才能生成Java8的 ...

Thank you . 楼主真厉害!
Reply View the author