今天学习《深入理解Java虚拟机:JVM高级特性与最佳实践》一书,并动手在Linux系统上编译OpenJDK 7,初次搞不太顺利,特记录下编译操作细节。

一、前期准备

约定:工具默认安装目录是/usr/local/,若有源码,则源码存放在/usr/local/src/目录下,笔者用到的工具已打包上传到百度云:https://pan.baidu.com/s/1WhsQHJvduK75EBE8lQqq9g

  1、编译需要的相关工具

    yum -y install gcc gcc-c++ alsa-lib alsa-lib-devel libXrender libXrender-devel libXi-devel libXt-devel libXtst-devel cups cups-devel

2、FreeType

笔者使用的是freetype-2.4.0.tar.gz,下载地址:https://sourceforge.net/projects/freetype/files/freetype2/2.4.0/

tar -zxvf freetype-2.4.0.tar.gz    # 解压

cd freetype-2.4.0

./configure && make && make install    # 编译安装

3、Apache Ant

笔者使用的是apache-ant-1.9.7-bin.tar.gz,下载地址:https://archive.apache.org/dist/ant/binaries/

tar -zxvf apache-ant-1.9.7-bin.tar.gz  # 解压

mv apache-ant-1.9.7 /usr/local/

ln -s /usr/local/apache-ant-1.9.7/bin/ant /usr/bin/ant  # 软链接到bin

4、BootstrapJDK

笔者使用的是jdk-6u45-linux-x64,因为源码更多是使用Java写的,因此需要使用一个可用的JDK去编译(详见深入理解Java虚拟机第一章),OpenJDK解压目录下有个README-builds.html<OpenJDK Build README>,建议详看一遍,文档说使用JDK 6

下载jdk-6u45-linux-x64.bin,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html

./jdk-6u45-linux-x64.bin    # 解压

mv jdk1.6.0_45 /usr/local/  # 移动目录

  5、OpenJDK

下载OpenJDK 7,地址:http://download.java.net/openjdk/jdk7/promoted/b147/openjdk-7-fcs-src-b147-27_jun_2011.zip,文件校验码:http://download.java.net/openjdk/jdk7/promoted/b147/openjdk-7-fcs-src-b147-27_jun_2011.md5

wget http://download.java.net/openjdk/jdk7/promoted/b147/openjdk-7-fcs-src-b147-27_jun_2011.zip   # 下载

unzip openjdk-7-fcs-src-b147-27_jun_2011.zip   # 解压

mv openjdk openjdk7  # 更改目录名

mkdir /usr/local/openjdk7  # 创建编译结果存放目录

二、配置环境变量

vim /etc/profile  # 在末尾加入以下内容注意各个目录Path

# openjdk 7 build
export ANT_HOME=/usr/local/apache-ant-1.9.7
export ALT_FREETYPE_HEADERS_PATH=/usr/local/include/freetype2
export ALT_FREETYPE_LIB_PATH=/usr/local/lib
export ALT_DROPS_DIR=/usr/local/src/openjdk7/drop
export ALT_BOOTDIR=/usr/local/jdk1.6.0_45
export ALT_JDK_IMPORT_PATH=/usr/local/jdk1.6.0_45
export ALT_OUTPUTDIR=/usr/local/openjdk7
export LANG=C  # default: en_US.UTF-8
export HOTSPOT_BUILD_JOBS=8
export ALT_PARALLEL_COMPILE_JOBS=8
export SKIP_COMPARE_IMAGES=true
export USE_PRECOMPILED_HEADER=true
export ALLOW_DOWNLOADS=true
export SKIP_DEBUG_BUILD=false
export SKIP_FASTDEBUG_BUILD=true
export DEBUG_NAME=debug
unset JAVA_HOME
unset CLASSPATH

  :wq  # 写入磁盘

  source /etc/profile  # 刷新环境变量配置使之生效,建议echo下几个配置项确认生效,例:echo $LANG

  cd openjdk7  # 进入OpenJDK解压目录

  make sanity   # 检查之前的配置是否正确,若无错误(Sanity check passed.)则OK,下面是笔者的执行结果宫参考

[root@dsp-centos--6_9 openjdk7]# make sanity
( cd ./jdk/make && \
make sanity HOTSPOT_IMPORT_CHECK=false JDK_TOPDIR=/usr/local/src/openjdk7/jdk JDK_MAKE_SHARED_DIR=/usr/local/src/openjdk7/jdk/make/common/shared EXTERNALSANITYCONTROL=true SOURCE_LANGUAGE_VERSION= TARGET_CLASS_VERSION= MILESTONE=internal BUILD_NUMBER=b00 JDK_BUILD_NUMBER=b00 FULL_VERSION=1.7.-internal-debug-root_2018_05_01_00_10-b00 PREVIOUS_JDK_VERSION=1.6. JDK_VERSION=1.7. JDK_MKTG_VERSION= JDK_MAJOR_VERSION= JDK_MINOR_VERSION= JDK_MICRO_VERSION= PREVIOUS_MAJOR_VERSION= PREVIOUS_MINOR_VERSION= PREVIOUS_MICRO_VERSION= ARCH_DATA_MODEL= VARIANT=DBG DEBUG_CLASSFILES=true COOKED_BUILD_NUMBER= ANT_HOME="/usr/local/apache-ant-1.9.7" ALT_OUTPUTDIR=/usr/local/openjdk7 ALT_LANGTOOLS_DIST=/usr/local/openjdk7/langtools/dist ALT_CORBA_DIST=/usr/local/openjdk7/corba/dist ALT_JAXP_DIST=/usr/local/openjdk7/jaxp/dist ALT_JAXWS_DIST=/usr/local/openjdk7/jaxws/dist ALT_HOTSPOT_IMPORT_PATH=/usr/local/openjdk7/hotspot/import BUILD_HOTSPOT=true ; )
make[]: Entering directory `/usr/local/src/openjdk7/jdk/make'
make[]: Leaving directory `/usr/local/src/openjdk7/jdk/make' Build Machine Information:
build machine = dsp-centos--6_9 Build Directory Structure:
CWD = /usr/local/src/openjdk7
TOPDIR = .
LANGTOOLS_TOPDIR = ./langtools
JAXP_TOPDIR = ./jaxp
JAXWS_TOPDIR = ./jaxws
CORBA_TOPDIR = ./corba
HOTSPOT_TOPDIR = ./hotspot
JDK_TOPDIR = ./jdk Build Directives:
BUILD_LANGTOOLS = true
BUILD_JAXP = true
BUILD_JAXWS = true
BUILD_CORBA = true
BUILD_HOTSPOT = true
BUILD_JDK = true
DEBUG_CLASSFILES =
DEBUG_BINARIES = Hotspot Settings:
HOTSPOT_BUILD_JOBS =
HOTSPOT_OUTPUTDIR = /usr/local/openjdk7/hotspot/outputdir
HOTSPOT_EXPORT_PATH = /usr/local/openjdk7/hotspot/import Bootstrap Settings:
BOOTDIR = /usr/local/jdk1..0_45
ALT_BOOTDIR = /usr/local/jdk1..0_45
BOOT_VER = 1.6. [requires at least 1.6]
OUTPUTDIR = /usr/local/openjdk7
ALT_OUTPUTDIR = /usr/local/openjdk7
ABS_OUTPUTDIR = /usr/local/openjdk7 Build Tool Settings:
SLASH_JAVA = /NOT-SET
ALT_SLASH_JAVA =
VARIANT = DBG
JDK_DEVTOOLS_DIR = /NOT-SET/devtools
ALT_JDK_DEVTOOLS_DIR =
ANT_HOME = /usr/local/apache-ant-1.9.
UNIXCOMMAND_PATH = /bin/
ALT_UNIXCOMMAND_PATH =
COMPILER_PATH = /usr/bin/
ALT_COMPILER_PATH =
DEVTOOLS_PATH = /usr/bin/
ALT_DEVTOOLS_PATH =
UNIXCCS_PATH = /usr/ccs/bin/
ALT_UNIXCCS_PATH =
USRBIN_PATH = /usr/bin/
ALT_USRBIN_PATH =
COMPILER_NAME = GCC4
COMPILER_VERSION = GCC4
CC_VER = 4.4. [requires at least 4.3.]
ZIP_VER = 3.0 [requires at least 2.2]
UNZIP_VER = 6.00 [requires at least 5.12]
ANT_VER = 1.9. [requires at least 1.7.]
TEMPDIR = /usr/local/openjdk7/tmp Build Directives:
OPENJDK = true
USE_HOTSPOT_INTERPRETER_MODE =
PEDANTIC =
DEV_ONLY =
NO_DOCS =
NO_IMAGES =
TOOLS_ONLY =
INSANE =
COMPILE_APPROACH = parallel
PARALLEL_COMPILE_JOBS =
ALT_PARALLEL_COMPILE_JOBS =
FASTDEBUG =
COMPILER_WARNINGS_FATAL = false
COMPILER_WARNING_LEVEL =
SHOW_ALL_WARNINGS =
INCREMENTAL_BUILD = false
CC_HIGHEST_OPT =
CC_HIGHER_OPT =
CC_LOWER_OPT =
CXXFLAGS = -g -fPIC -DCC_NOEX -W -Wall -Wno-unused -Wno-parentheses -fno-omit-frame-pointer -D_LITTLE_ENDIAN
CFLAGS = -g -fno-strict-aliasing -fPIC -W -Wall -Wno-unused -Wno-parentheses -pipe -fno-omit-frame-pointer -D_LITTLE_ENDIAN
BOOT_JAVA_CMD = /usr/local/jdk1..0_45/bin/java -XX:-PrintVMOptions -XX:+UnlockDiagnosticVMOptions -XX:-LogVMOutput -Xmx512m -Xms512m -XX:PermSize=32m -XX:MaxPermSize=160m
BOOT_JAVAC_CMD = /usr/local/jdk1..0_45/bin/javac -J-XX:ThreadStackSize= -J-XX:-PrintVMOptions -J-XX:+UnlockDiagnosticVMOptions -J-XX:-LogVMOutput -J-Xmx512m -J-Xms512m -J-XX:PermSize=32m -J-XX:MaxPermSize=160m -encoding ascii -source -target -XDignore.symbol.file=true
BOOT_JAR_CMD = /usr/local/jdk1..0_45/bin/jar
BOOT_JARSIGNER_CMD = /usr/local/jdk1..0_45/bin/jarsigner
JAVAC_CMD = /usr/local/jdk1..0_45/bin/java -XX:-PrintVMOptions -XX:+UnlockDiagnosticVMOptions -XX:-LogVMOutput -Xmx512m -Xms512m -XX:PermSize=32m -XX:MaxPermSize=160m -Xbootclasspath/p:/usr/local/openjdk7/langtools/dist/bootstrap/lib/javac.jar -jar /usr/local/openjdk7/langtools/dist/bootstrap/lib/javac.jar -g -source -target -encoding ascii -Xbootclasspath:/usr/local/openjdk7/classes
JAVAH_CMD = /usr/local/jdk1..0_45/bin/java -XX:-PrintVMOptions -XX:+UnlockDiagnosticVMOptions -XX:-LogVMOutput -Xmx512m -Xms512m -XX:PermSize=32m -XX:MaxPermSize=160m -Xbootclasspath/p:/usr/local/openjdk7/langtools/dist/bootstrap/lib/javah.jar:/usr/local/openjdk7/langtools/dist/bootstrap/lib/javac.jar -jar /usr/local/openjdk7/langtools/dist/bootstrap/lib/javah.jar -bootclasspath /usr/local/openjdk7/classes
JAVADOC_CMD = /usr/local/jdk1..0_45/bin/java -XX:-PrintVMOptions -XX:+UnlockDiagnosticVMOptions -XX:-LogVMOutput -Xmx512m -Xms512m -XX:PermSize=32m -XX:MaxPermSize=160m -Xbootclasspath/p:/usr/local/openjdk7/langtools/dist/bootstrap/lib/javadoc.jar:/usr/local/openjdk7/langtools/dist/bootstrap/lib/javac.jar:/usr/local/openjdk7/langtools/dist/bootstrap/lib/doclets.jar -jar /usr/local/openjdk7/langtools/dist/bootstrap/lib/javadoc.jar -bootclasspath /usr/local/openjdk7/classes Build Platform Settings:
USER = root
PLATFORM = linux
ARCH = amd64
LIBARCH = amd64
ARCH_FAMILY = amd64
ARCH_DATA_MODEL =
ARCHPROP = amd64
ALSA_VERSION = 1.1.
OS_VERSION = 2.6.-696.16..el6.x86_64 [requires at least 2.6]
OS_VARIANT_NAME = RedHat
OS_VARIANT_VERSION =
MB_OF_MEMORY = GNU Make Settings:
MAKE = make
MAKE_VER = 3.81 [requires at least 3.81]
MAKECMDGOALS = sanity
MAKEFLAGS = w
SHELL = /bin/sh Target Build Versions:
JDK_VERSION = 1.7.
MILESTONE = internal
RELEASE = 1.7.-internal-debug
FULL_VERSION = 1.7.-internal-debug-root_2018_05_01_00_10-b00
BUILD_NUMBER = b00 External File/Binary Locations:
USRJDKINSTANCES_PATH = /opt/java
BUILD_JDK_IMPORT_PATH = /NOT-SET/re/jdk/1.7./promoted/latest/binaries
ALT_BUILD_JDK_IMPORT_PATH =
JDK_IMPORT_PATH = /usr/local/jdk1..0_45
ALT_JDK_IMPORT_PATH = /usr/local/jdk1..0_45
LANGTOOLS_DIST = /usr/local/openjdk7/langtools/dist
ALT_LANGTOOLS_DIST = /usr/local/openjdk7/langtools/dist
CORBA_DIST = /usr/local/openjdk7/corba/dist
ALT_CORBA_DIST = /usr/local/openjdk7/corba/dist
JAXP_DIST = /usr/local/openjdk7/jaxp/dist
ALT_JAXP_DIST = /usr/local/openjdk7/jaxp/dist
JAXWS_DIST = /usr/local/openjdk7/jaxws/dist
ALT_JAXWS_DIST = /usr/local/openjdk7/jaxws/dist
HOTSPOT_DOCS_IMPORT_PATH = /usr/local/openjdk7/hotspot/import/docs
ALT_HOTSPOT_DOCS_IMPORT_PATH =
HOTSPOT_IMPORT_PATH = /usr/local/openjdk7/hotspot/import
ALT_HOTSPOT_IMPORT_PATH = /usr/local/openjdk7/hotspot/import
HOTSPOT_SERVER_PATH = /usr/local/openjdk7/hotspot/import/jre/lib/amd64/server
ALT_HOTSPOT_SERVER_PATH =
CACERTS_FILE = ./../src/share/lib/security/cacerts
ALT_CACERTS_FILE =
CUPS_HEADERS_PATH = /usr/include
ALT_CUPS_HEADERS_PATH = OpenJDK-specific settings:
FREETYPE_HEADERS_PATH = /usr/local/include/freetype2
ALT_FREETYPE_HEADERS_PATH = /usr/local/include/freetype2
FREETYPE_LIB_PATH = /usr/local/lib
ALT_FREETYPE_LIB_PATH = /usr/local/lib Previous JDK Settings:
PREVIOUS_RELEASE_PATH = USING-PREVIOUS_RELEASE_IMAGE
ALT_PREVIOUS_RELEASE_PATH =
PREVIOUS_JDK_VERSION = 1.6.
ALT_PREVIOUS_JDK_VERSION =
PREVIOUS_JDK_FILE =
ALT_PREVIOUS_JDK_FILE =
PREVIOUS_JRE_FILE =
ALT_PREVIOUS_JRE_FILE =
PREVIOUS_RELEASE_IMAGE = /usr/local/jdk1..0_45
ALT_PREVIOUS_RELEASE_IMAGE = Sanity check passed.

三、编译操作

  make 2>&1 | tee $ALT_OUTPUTDIR/build.log  # 编译,标准错误输出stderr重定向到标准输出stdout,将编译过程数据重定向到文件保存。

  若编译失败,重新编译前先执行:make clean

  若编译成功,提示信息如下:

-- Build times ----------
Target debug_build
Start 2018-04-30 23:30:30
End 2018-04-30 23:45:05
00:01:45 corba
00:03:32 hotspot
00:00:18 jaxp
00:00:24 jaxws
00:08:05 jdk
00:00:31 langtools
00:14:35 TOTAL
-------------------------

四、验证

  进入/usr/local/openjdk7/bin(即$ALT_OUTPUTDIR/bin)目录,执行:./java -version

[root@dsp-centos-1-6_9 bin]# ./java -version
openjdk version "1.7.0-internal-debug"
OpenJDK Runtime Environment (build 1.7.0-internal-debug-root_2018_04_30_20_26-b00)
OpenJDK 64-Bit Server VM (build 21.0-b17-jvmg, mixed mode)

  验证虚拟机

---------------------------------------------------------------------------------
# 将env.sh中的环境变量单独拎出来执行下,笔者直接执行env.sh没效果
# export JAVA_HOME=/usr/local/jdk1..0_45
# export LD_LIBRARY_PATH=.:${JAVA_HOME}/jre/lib/amd64/native_threads:${JAVA_HOME}/jre/lib/amd64:
# export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/jre/lib/i18n.jar
# export HOTSPOT_BUILD_USER="root in hotspot" [root@dsp-centos--6_9 jvmg]# export JAVA_HOME=/usr/local/jdk1..0_45
[root@dsp-centos--6_9 jvmg]# echo $JAVA_HOME # 确认下是否符合预期
/usr/local/jdk1..0_45
[root@dsp-centos--6_9 jvmg]# export LD_LIBRARY_PATH=.:${JAVA_HOME}/jre/lib/amd64/native_threads:${JAVA_HOME}/jre/lib/amd64:
[root@dsp-centos--6_9 jvmg]# echo $LD_LIBRARY_PATH
.:/usr/local/jdk1..0_45/jre/lib/amd64/native_threads:/usr/local/jdk1..0_45/jre/lib/amd64:
[root@dsp-centos--6_9 jvmg]# export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/jre/lib/i18n.jar
[root@dsp-centos--6_9 jvmg]# echo $CLASSPATH
.:/usr/local/jdk1..0_45/jre/lib/rt.jar:/usr/local/jdk1..0_45/jre/lib/i18n.jar
[root@dsp-centos--6_9 jvmg]# export HOTSPOT_BUILD_USER="root in hotspot"
[root@dsp-centos--6_9 jvmg]# echo $HOTSPOT_BUILD_USER
root in hotspot
---------------------------------------------------------------------------------
[root@dsp-centos--6_9 jvmg]# ./gamma -version
Using java runtime at: /usr/local/jdk1..0_45/jre
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
OpenJDK -Bit Server VM (build 21.0-b17-jvmg, mixed mode)
---------------------------------------------------------------------------------
[root@dsp-centos--6_9 jvmg]# ./test_gamma   # 解八皇后问题
java full version "1.6.0_45-b06"
Using java runtime at: /usr/local/jdk1..0_45/jre
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
OpenJDK -Bit Server VM (build 21.0-b17-jvmg, mixed mode) . A1 B5 C8 D6 E3 F7 G2 H4
. A1 B6 C8 D3 E7 F4 G2 H5
. A1 B7 C4 D6 E8 F2 G5 H3
. A1 B7 C5 D8 E2 F4 G6 H3
. A2 B4 C6 D8 E3 F1 G7 H5
. A2 B5 C7 D1 E3 F8 G6 H4
. A2 B5 C7 D4 E1 F8 G6 H3
. A2 B6 C1 D7 E4 F8 G3 H5
. A2 B6 C8 D3 E1 F4 G7 H5
. A2 B7 C3 D6 E8 F5 G1 H4
. A2 B7 C5 D8 E1 F4 G6 H3
. A2 B8 C6 D1 E3 F5 G7 H4
. A3 B1 C7 D5 E8 F2 G4 H6
. A3 B5 C2 D8 E1 F7 G4 H6
. A3 B5 C2 D8 E6 F4 G7 H1
. A3 B5 C7 D1 E4 F2 G8 H6
. A3 B5 C8 D4 E1 F7 G2 H6
. A3 B6 C2 D5 E8 F1 G7 H4
. A3 B6 C2 D7 E1 F4 G8 H5
. A3 B6 C2 D7 E5 F1 G8 H4
. A3 B6 C4 D1 E8 F5 G7 H2
. A3 B6 C4 D2 E8 F5 G7 H1
. A3 B6 C8 D1 E4 F7 G5 H2
. A3 B6 C8 D1 E5 F7 G2 H4
. A3 B6 C8 D2 E4 F1 G7 H5
. A3 B7 C2 D8 E5 F1 G4 H6
. A3 B7 C2 D8 E6 F4 G1 H5
. A3 B8 C4 D7 E1 F6 G2 H5
. A4 B1 C5 D8 E2 F7 G3 H6
. A4 B1 C5 D8 E6 F3 G7 H2
. A4 B2 C5 D8 E6 F1 G3 H7
. A4 B2 C7 D3 E6 F8 G1 H5
. A4 B2 C7 D3 E6 F8 G5 H1
. A4 B2 C7 D5 E1 F8 G6 H3
. A4 B2 C8 D5 E7 F1 G3 H6
. A4 B2 C8 D6 E1 F3 G5 H7
. A4 B6 C1 D5 E2 F8 G3 H7
. A4 B6 C8 D2 E7 F1 G3 H5
. A4 B6 C8 D3 E1 F7 G5 H2
. A4 B7 C1 D8 E5 F2 G6 H3
. A4 B7 C3 D8 E2 F5 G1 H6
. A4 B7 C5 D2 E6 F1 G3 H8
. A4 B7 C5 D3 E1 F6 G8 H2
. A4 B8 C1 D3 E6 F2 G7 H5
. A4 B8 C1 D5 E7 F2 G6 H3
. A4 B8 C5 D3 E1 F7 G2 H6
. A5 B1 C4 D6 E8 F2 G7 H3
. A5 B1 C8 D4 E2 F7 G3 H6
. A5 B1 C8 D6 E3 F7 G2 H4
. A5 B2 C4 D6 E8 F3 G1 H7
. A5 B2 C4 D7 E3 F8 G6 H1
. A5 B2 C6 D1 E7 F4 G8 H3
. A5 B2 C8 D1 E4 F7 G3 H6
. A5 B3 C1 D6 E8 F2 G4 H7
. A5 B3 C1 D7 E2 F8 G6 H4
. A5 B3 C8 D4 E7 F1 G6 H2
. A5 B7 C1 D3 E8 F6 G4 H2
. A5 B7 C1 D4 E2 F8 G6 H3
. A5 B7 C2 D4 E8 F1 G3 H6
. A5 B7 C2 D6 E3 F1 G4 H8
. A5 B7 C2 D6 E3 F1 G8 H4
. A5 B7 C4 D1 E3 F8 G6 H2
. A5 B8 C4 D1 E3 F6 G2 H7
. A5 B8 C4 D1 E7 F2 G6 H3
. A6 B1 C5 D2 E8 F3 G7 H4
. A6 B2 C7 D1 E3 F5 G8 H4
. A6 B2 C7 D1 E4 F8 G5 H3
. A6 B3 C1 D7 E5 F8 G2 H4
. A6 B3 C1 D8 E4 F2 G7 H5
. A6 B3 C1 D8 E5 F2 G4 H7
. A6 B3 C5 D7 E1 F4 G2 H8
. A6 B3 C5 D8 E1 F4 G2 H7
. A6 B3 C7 D2 E4 F8 G1 H5
. A6 B3 C7 D2 E8 F5 G1 H4
. A6 B3 C7 D4 E1 F8 G2 H5
. A6 B4 C1 D5 E8 F2 G7 H3
. A6 B4 C2 D8 E5 F7 G1 H3
. A6 B4 C7 D1 E3 F5 G2 H8
. A6 B4 C7 D1 E8 F2 G5 H3
. A6 B8 C2 D4 E1 F7 G5 H3
. A7 B1 C3 D8 E6 F4 G2 H5
. A7 B2 C4 D1 E8 F5 G3 H6
. A7 B2 C6 D3 E1 F4 G8 H5
. A7 B3 C1 D6 E8 F5 G2 H4
. A7 B3 C8 D2 E5 F1 G6 H4
. A7 B4 C2 D5 E8 F1 G3 H6
. A7 B4 C2 D8 E6 F1 G3 H5
. A7 B5 C3 D1 E6 F8 G2 H4
. A8 B2 C4 D1 E7 F5 G3 H6
. A8 B2 C5 D3 E1 F7 G4 H6
. A8 B3 C1 D6 E2 F5 G7 H4
. A8 B4 C1 D3 E6 F2 G7 H5
[root@dsp-centos--6_9 jvmg]#

五、笔者碰到的问题

  1、java.lang.RuntimeException: time is more than 10 years from present

    修改jdk/src/share/classes/java/util/CurrencyData.properties,将日期改为十年以内,JDK的Bug。

  108行改为: AZ=AZM;2009-12-31-20-00-00;AZN,接下来的377、439、529、555行类似修改保存,重新编译。

2、/usr/local/openjdk7-debug/jaxws/build/xml_generated/build-drop-jaf_src.xml:96: Redirection detected from https to http. Protocol switch unsafe, not allowed.

  原因是jdk7-jaf-2010_08_19.zip这个包下载不了导致的,解决方案:

将以下三个文件下载后置于OpenJDK解压后根目录下的drop目录下,

并在环境变量中加入配置:export ALT_DROPS_DIR=/usr/local/src/openjdk7/drop # 注意目录Path

jdk7-jaf-2010_08_19.zip,下载地址:https://netix.dl.sourceforge.net/project/jdk7src/input-archives/jdk7-jaf-2010_08_19.zip

jdk7-jaxws2_2_4-b03-2011_05_27.zip,下载地址:http://download.java.net/glassfish/components/jax-ws/openjdk/jdk7/jdk7-jaxws2_2_4-b03-2011_05_27.zip

jaxp145_01.zip,下载地址:http://download.java.net/jaxp/1.4.5/jaxp145_01.zip

以下是操作过程的命令:

mkdir /usr/local/src/openjdk7/drop
export ALT_DROPS_DIR=/usr/local/src/openjdk7/drop
cd /usr/local/src/openjdk7/drop
wget http://download.java.net/jaxp/1.4.5/jaxp145_01.zip
wget https://netix.dl.sourceforge.net/project/jdk7src/input-archives/jdk7-jaf-2010_08_19.zip
wget http://download.java.net/glassfish/components/jax-ws/openjdk/jdk7/jdk7-jaxws2_2_4-b03-2011_05_27.zip

六、参考资料:

  《深入理解Java虚拟机:JVM高级特性与最佳实践》

  [深入理解Java虚拟机]第一章实战 自己编译JDK

  ubuntu13 编译openjdk7的问题并解决

  java-编译openJdk

  openjdk7 源码下载

JDK源码下载

OpenJDK8 Windows编译

Linux CentOS 6.9 Minimal 编译 OpenJDK 7的更多相关文章

  1. linux CentOS部署【minimal 】

    1.为什么选择CentOS不选择其他版本:http://www.cnblogs.com/TeemoHQ/p/6377260.html 2.准备的资源:VMware[官网下载],CentOS镜像 [阿里 ...

  2. Linux(CentOS 7)使用gcc编译c,c++代码

    安装gcc: 1.使用 yum -list gcc* 查询 centos 官方gcc的所有包: 可安装的软件包 gcc.x86_64 gcc-c++.x86_64 gcc-gfortran.x86_6 ...

  3. CentOS编译openjdk

    编译openjdk 1. 下载openjdk源码 openjdk的官网是OpenJDK (java.net) 在网站左侧就能看到它的源码位置的链接 从图上可以看到,它的源码在两个位置有托管,Mercu ...

  4. 阿里云服务器Linux CentOS安装配置(九)shell编译、打包、部署

    阿里云服务器Linux CentOS安装配置(九)shell编译.打包.部署 1.查询当前目录以及子目录下所有的java文件,并显示查询结果 find . -name *.java -type f - ...

  5. 在Linux CentOS上编译并安装Clang 3.5.0

    编译CoreCLR需要Clang 3.5,而CentOS上安装的是Clang 3.4.2(yum repos中最新版也是这个),只能自己手工编译LLVM的源代码进行安装. (注:CentOS的版本是6 ...

  6. linux centos安装编译phantomjs 2.0的方法

    phantomjs 2.0最新版的官方不提供编译好的文件下载,只能自己编译,有教程但是过于简单,特别是服务器上要安装N多的支持.折腾到现在终于装好了并且能正常运行了,截图mark一下: linux c ...

  7. Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)

    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,Linux CentOS 7 安装PostgreSQL 9.5.17 安装过程 特此记录. 安装环境: 数据库:Postgre ...

  8. Linux CentOS 6.6安装JDK1.7

    Linux CentOS 6.6安装JDK1.7 目录 1.下载JDK 2.卸载JDK 3.安装JDK 3.1..rpm后缀格式JDK安装方式 3.2..tar.gz后缀格式JDK安装方式 4.验证安 ...

  9. JVM学习——编译OpenJDK

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

随机推荐

  1. loj#2054. 「TJOI / HEOI2016」树

    题目链接 loj#2054. 「TJOI / HEOI2016」树 题解 每次标记覆盖整棵字数,子树维护对于标记深度取max dfs序+线段树维护一下 代码 #include<cstdio> ...

  2. 20172302 《Java软件结构与数据结构》第三周学习总结

    2018年学习总结博客总目录:第一周 第二周 第三周 教材学习内容总结 第五章 队列 1.队列是一种线性集合,其元素从一端加入,从另一端删除:队列元素是按先进先出(FIFO(First in Firs ...

  3. 2018年web最新面试知识点总结

    00.行内元素有哪些?块级元素有哪些? 空(void)元素有那些? 行内元素:a  b  span  img  input  select  strong 块级元素:div  ul  ol  li   ...

  4. HttpServerProvider实现http服务接口(一)

    啥也不说了,直接上代码,简单的示例. 服务端代码: package dyan.server; import java.io.BufferedReader; import java.io.IOExcep ...

  5. c++以代理的方式来实现接口化编程

      假如你项目代码本身已经实现了很多的实体类,但并未采用接口,可以考虑以这种方式来实现接口化编程 struct ITest { virtual void Test()=0; }; class CTes ...

  6. 面试题:编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。(c++实现)

    实例说明 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ...

  7. facebook's HipHop for PHP: Move Fast

    One of the key values at Facebook is to move fast. For the past six years, we have been able to acco ...

  8. 【ZH奶酪】如何用textgenrnn处理中文

    如何用textgenrnn处理中文 1. 什么是textgenrnn? textgenrnn是建立在Keras和TensorFlow之上的,可用于生成字级别和词级别文本.网络体系结构使用注意力加权来加 ...

  9. rman输出日志的几种方法(转)

    在使用rman的时候经常会碰到以下两种场景,需要把rman的日志输出到文件中: 1.显示的日志太多,导致一个屏幕显示不完,影响了问题的诊断,这时候需要把rman的log输出到文本中,整个的诊断过程就相 ...

  10. Asp.Net MVC4中的全局过滤器

    可以对整个项目进行全局监控. 新建一个MVC4项目,可以在global.asax文件中看到如下代码:  FilterConfig.RegisterGlobalFilters(GlobalFilters ...