其实我在使用Cent OS编译之前,我曾用ubuntu14.04编译过,但是出现很多错误,然后百度了一下好像是因为内核版本太高;然后我就用CentOS 6.5编译,一次成功,简直不敢相信会这么顺利...
网上有很多关于编译openJDK的文章,不过这是我第一次成功的编译openJDK,记下来以备后用!
基本步骤如下:
1. 下载软件包: http://download.java.net/openjdk/jdk7/
直接解压就好了,生成jdk7目录;
PS:这个OpenJDK 7在2011年6月份就再也没有更新了,所以下载下来不需要再去更新源代码了
2. 执行命令:yum-builddep java-1.7.0-openjdk
因为编译openJDK需要很多依赖,这种方法是最简单的,它可以解决编译JDK所有的依赖;
不过还有一些需要自己安装:libXi-devel freetype-devel
3. 设置如下的环境变量:
export LANG=C
export LC_ALL=C
export ALT_BOOTDIR=/usr/lib/jvm/java-1.6.0/
export ALLOW_DOWNLOADS=true
export USE_PRECOMPILED_HEADER=true
export SKIP_DEBUG_BUILD=false
export SKIP_FASTDEBUG_BUILD=true
export DEBUG_NAME=debug
unset JAVA_HOME
unset CLASSPATH
4. 执行检查:
make sanity
我是比较顺利的,一次通过!我把Cent OS上的sanity日志贴到这里:
make sanity
( cd ./jdk/make && \
make sanity HOTSPOT_IMPORT_CHECK=false JDK_TOPDIR=/mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/jdk JDK_MAKE_SHARED_DIR=/mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/jdk/make/common/shared EXTERNALSANITYCONTROL=true SOURCE_LANGUAGE_VERSION=7 TARGET_CLASS_VERSION=7 MILESTONE=internal BUILD_NUMBER=b00 JDK_BUILD_NUMBER=b00 FULL_VERSION=1.7.0-internal-root_2014_12_18_16_31-b00 PREVIOUS_JDK_VERSION=1.6.0 JDK_VERSION=1.7.0 JDK_MKTG_VERSION=7 JDK_MAJOR_VERSION=1 JDK_MINOR_VERSION=7 JDK_MICRO_VERSION=0 PREVIOUS_MAJOR_VERSION=1 PREVIOUS_MINOR_VERSION=6 PREVIOUS_MICRO_VERSION=0 ARCH_DATA_MODEL=64 COOKED_BUILD_NUMBER=0 ALT_OUTPUTDIR=/mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64 ALT_LANGTOOLS_DIST=/mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/langtools/dist ALT_CORBA_DIST=/mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/corba/dist ALT_JAXP_DIST=/mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/jaxp/dist ALT_JAXWS_DIST=/mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/jaxws/dist ALT_HOTSPOT_IMPORT_PATH=/mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/hotspot/import BUILD_HOTSPOT=true ; )
/bin/sh: line 0: [: /bin/sh:: integer expression expected
/bin/sh: line 0: [: /bin/sh:: integer expression expected
/bin/sh: line 0: [: /NO_BOOTDIR/bin/java:: integer expression expected
/bin/sh: line 0: [: /NO_BOOTDIR/bin/java:: integer expression expected
/bin/sh: line 0: [: No: integer expression expected
/bin/sh: line 0: [: No: integer expression expected
make[1]: Entering directory `/mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/jdk/make'
make[1]: Leaving directory `/mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/jdk/make'
Build Machine Information:
build machine = labserver
Build Directory Structure:
CWD = /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk
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 = /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/hotspot/outputdir
HOTSPOT_EXPORT_PATH = /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/hotspot/import
Bootstrap Settings:
BOOTDIR = /NO_BOOTDIR
ALT_BOOTDIR =
BOOT_VER = /bin/sh: /NO_BOOTDIR/bin/java: No such file or directory [requires at least 1.6]
OUTPUTDIR = /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64
ALT_OUTPUTDIR = /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64
ABS_OUTPUTDIR = /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64
Build Tool Settings:
SLASH_JAVA = /NOT-SET
ALT_SLASH_JAVA =
VARIANT = OPT
JDK_DEVTOOLS_DIR = /NOT-SET/devtools
ALT_JDK_DEVTOOLS_DIR =
ANT_HOME =
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.7 [requires at least 4.3.0]
ZIP_VER = 3.0 [requires at least 2.2]
UNZIP_VER = 6.00 [requires at least 5.12]
ANT_VER = 1.7.1 [requires at least 1.7.1]
TEMPDIR = /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/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 = 2
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 = -O2 -fPIC -DCC_NOEX -W -Wall -Wno-unused -Wno-parentheses -fno-omit-frame-pointer -D_LITTLE_ENDIAN
CFLAGS = -O2 -fno-strict-aliasing -fPIC -W -Wall -Wno-unused -Wno-parentheses -pipe -fno-omit-frame-pointer -D_LITTLE_ENDIAN
BOOT_JAVA_CMD = /NO_BOOTDIR/bin/java -XX:-PrintVMOptions -XX:+UnlockDiagnosticVMOptions -XX:-LogVMOutput -Xmx512m -Xms512m -XX:PermSize=32m -XX:MaxPermSize=160m
BOOT_JAVAC_CMD = /NO_BOOTDIR/bin/javac -J-XX:ThreadStackSize=1536 -J-XX:-PrintVMOptions -J-XX:+UnlockDiagnosticVMOptions -J-XX:-LogVMOutput -J-Xmx512m -J-Xms512m -J-XX:PermSize=32m -J-XX:MaxPermSize=160m -encoding ascii -source 6 -target 6 -XDignore.symbol.file=true
BOOT_JAR_CMD = /NO_BOOTDIR/bin/jar
BOOT_JARSIGNER_CMD = /NO_BOOTDIR/bin/jarsigner
JAVAC_CMD = /NO_BOOTDIR/bin/java -XX:-PrintVMOptions -XX:+UnlockDiagnosticVMOptions -XX:-LogVMOutput -Xmx512m -Xms512m -XX:PermSize=32m -XX:MaxPermSize=160m -Xbootclasspath/p:/mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/langtools/dist/bootstrap/lib/javac.jar -jar /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/langtools/dist/bootstrap/lib/javac.jar -source 7 -target 7 -encoding ascii -Xbootclasspath:/mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/classes
JAVAH_CMD = /NO_BOOTDIR/bin/java -XX:-PrintVMOptions -XX:+UnlockDiagnosticVMOptions -XX:-LogVMOutput -Xmx512m -Xms512m -XX:PermSize=32m -XX:MaxPermSize=160m -Xbootclasspath/p:/mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/langtools/dist/bootstrap/lib/javah.jar:/mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/langtools/dist/bootstrap/lib/javac.jar -jar /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/langtools/dist/bootstrap/lib/javah.jar -bootclasspath /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/classes
JAVADOC_CMD = /NO_BOOTDIR/bin/java -XX:-PrintVMOptions -XX:+UnlockDiagnosticVMOptions -XX:-LogVMOutput -Xmx512m -Xms512m -XX:PermSize=32m -XX:MaxPermSize=160m -Xbootclasspath/p:/mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/langtools/dist/bootstrap/lib/javadoc.jar:/mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/langtools/dist/bootstrap/lib/javac.jar:/mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/langtools/dist/bootstrap/lib/doclets.jar -jar /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/langtools/dist/bootstrap/lib/javadoc.jar -bootclasspath /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/classes
Build Platform Settings:
USER = root
PLATFORM = linux
ARCH = amd64
LIBARCH = amd64
ARCH_FAMILY = amd64
ARCH_DATA_MODEL = 64
ARCHPROP = amd64
ALSA_VERSION = 1.0.22
OS_VERSION = 2.6.32-431.5.1.el6.x86_64 [requires at least 2.6]
OS_VARIANT_NAME = RedHat
OS_VARIANT_VERSION =
MB_OF_MEMORY = 7842
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.0
MILESTONE = internal
RELEASE = 1.7.0-internal
FULL_VERSION = 1.7.0-internal-root_2014_12_18_16_31-b00
BUILD_NUMBER = b00
External File/Binary Locations:
USRJDKINSTANCES_PATH = /opt/java
BUILD_JDK_IMPORT_PATH = /NOT-SET/re/jdk/1.7.0/promoted/latest/binaries
ALT_BUILD_JDK_IMPORT_PATH =
JDK_IMPORT_PATH = /NOT-SET/re/jdk/1.7.0/promoted/latest/binaries/linux-amd64
ALT_JDK_IMPORT_PATH =
LANGTOOLS_DIST = /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/langtools/dist
ALT_LANGTOOLS_DIST = /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/langtools/dist
CORBA_DIST = /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/corba/dist
ALT_CORBA_DIST = /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/corba/dist
JAXP_DIST = /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/jaxp/dist
ALT_JAXP_DIST = /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/jaxp/dist
JAXWS_DIST = /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/jaxws/dist
ALT_JAXWS_DIST = /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/jaxws/dist
HOTSPOT_DOCS_IMPORT_PATH = /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/hotspot/import/docs
ALT_HOTSPOT_DOCS_IMPORT_PATH =
HOTSPOT_IMPORT_PATH = /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/hotspot/import
ALT_HOTSPOT_IMPORT_PATH = /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/hotspot/import
HOTSPOT_SERVER_PATH = /mnt/disk/file/cislc/personal/sunbingyong/jdk/openjdk/build/linux-amd64/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/include
ALT_FREETYPE_HEADERS_PATH =
FREETYPE_LIB_PATH = /usr/lib
ALT_FREETYPE_LIB_PATH =
Previous JDK Settings:
PREVIOUS_RELEASE_PATH =
ALT_PREVIOUS_RELEASE_PATH =
PREVIOUS_JDK_VERSION = 1.6.0
ALT_PREVIOUS_JDK_VERSION =
PREVIOUS_JDK_FILE =
ALT_PREVIOUS_JDK_FILE =
PREVIOUS_JRE_FILE =
ALT_PREVIOUS_JRE_FILE =
PREVIOUS_RELEASE_IMAGE =
ALT_PREVIOUS_RELEASE_IMAGE =
Sanity check passed.
5. 如果上一步没有错误,就可以执行make。等待一段时间之后就OK了!
6. 编译之后在build/可以看到:
root@labserver build # ls
linux-amd64 linux-amd64-debug
root@labserver build # cd linux-amd64
root@labserver linux-amd64 # ls
bin bundles democlasses hotspot j2re-image langtools sanityCheckWarnings.txt tmp
btbins classes docs hotspot.log j2sdk-image lib source-bundles
btclasses corba gennativesrc impsrc jaxp sample source_tips
btjars demo gensrc include jaxws sanityCheckMessages.txt symbols
root@labserver linux-amd64 # cd bin
root@labserver bin # ./java -version
openjdk version "1.7.0-internal-debug"
OpenJDK Runtime Environment (build 1.7.0-internal-debug-bing_2014_12_17_14_44-b00)
OpenJDK 64-Bit Server VM (build 21.0-b17-jvmg, mixed mode)