Ubuntu14.04編譯openjdk7u6
從昨天早上到今天中午,搗鼓了一天多,終于成功了。
中間重裝了一次系統。
環境:Ubuntu14.04LTS64位
java-6-openjdk-amd64
openjdk-7u6-fcs-src-b24-28_aug_2012.zip
感悟:
-
編譯openjdk與環境很有關系,原來用32位ubuntu的時候,怎麼都不成功,關鍵是網上很多人用的是64位機器,對32位編譯講解的比較少,是以失敗了好多次後果斷換成64位。
-
openjdk源代碼下載下傳版本很有技巧,網上大多教你從官網下載下傳,這叫一個坑爹,第一次不小就下載下傳了一個老版本,結果make運作到中途一堆錯誤,真叫人傷心。樓主推薦openjdk-7u6-fcs-src-b24-28_aug_2012.zip,在make中沒有修改任何源代碼,堪稱完美。
-
jdk和jre的版本用jdk6,樓主編譯多次總是會報如下錯誤:
Erroroccurred during initialization of VM
java/lang/NoClassDefFoundError:java/lang/invoke/AdapterMethodHandle
最後發現是jdk版本問題,參考http://blog.zarue.com/blog/2014/06/21/netbeans-debug-hotspot/
弄了這麼久,終于成功了。
下面說說主要步驟:
-
配置環境<參考http://wendal.net/420.html>
apt-getbuild-dep openjdk-6
apt-getinstall openjdk-6-jdk
apt-getinstall libasound-dev build-essential
然後注意配置環境變量:
~sudovi /etc/profile
在最後加上:
exportJAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-amd64
exportJRE_HOME=${JAVA_HOME}/jre
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
exportPATH=${JAVA_HOME}/bin:$PATH
運作~source/etc/profile使jdk環境生效。
樓主配置完成後檢視效果:
[email protected]:~$java -version
javaversion "1.6.0_31"
OpenJDKRuntime Environment (IcedTea6 1.13.3) (6b31-1.13.3-1ubuntu1)
OpenJDK64-Bit Server VM (build 23.25-b01, mixed mode)
[email protected]:~$javac -version
javac1.6.0_31
[email protected]:~$
-
下載下傳openjdk-7u6-fcs-src-b24-28_aug_2012.zip
網上有很多種下載下傳方法會使人頭暈眼花,樓主認為最漂亮的連結是:
http://download.java.net/openjdk/?q=download/openjdk/
【說明:這個連結展示的是用wget指令下載下傳的資源目錄。為了友善讀者,這裡附上
openjdk-7u6-fcs-src-b24-28_aug_2012.zip的下載下傳連結http://pan.baidu.com/s/1pJ4rxyV,歡迎交流學習。】
免得不熟悉官網的人被困在幾個頁面上,最終還是沒有找到最新的版本。
下載下傳完成後當然是用unzip解壓,最後會有一個openjdk的檔案夾。
-
編譯
編譯參考:http://blog.csdn.net/myproudcodelife/article/details/24844427
下面是樓主的build.sh:
#!/bin/bash
#設定語言
exportLANG=C
#exportALT_BOOTDIR=/usr/cao/jdk1.7.0_45
exportALT_BOOTDIR=/usr/lib/jvm/java-1.6.0-openjdk-amd64/
#允許自動下載下傳依賴包
exportALLOW_DOWNLOADS=true
#使用預編譯頭檔案,不加這個編譯會更慢
exportUSE_PRECOMPILED_HEADER=true
#要編譯的内容
exportBUILD_LANGTOOLS=true
exportBUILD_JAXP=true
exportBUILD_JAXWS=true
exportBUILD_CORBA=true
exportBUILD_HOSTPOT=true
exportBUILD_JDK=true
#要編譯的版本
exportSKIP_DEBUG_BUILD=false
exportSKIP_FASTDEBUG_BUILD=true
exportDEBUG_NAME=debug
#把它設定為FALSE可以避免javaws和浏覽器Java插件之類的部分build
BUILD_DEPLOY=false
#把它設定為false就不會build出安裝包。因為安裝包裡有一些奇怪的依賴
#但即便不build出它也已經得到完整的JDK鏡像,是以還是不用build它
BUILD_INSTALL=false
#存放編譯結果
exportALT_OUTPUTDIR=/usr/openjdk/build
unsetCLASSPATH
unsetJAVA_HOME
#makesanity && make
#makeARCH_DATA_MODEL=64 BUILD_JAXWS=false BUILD_JAXP=false
make2>&1 | tee $ALT_OUTPUTDIR/build.log
-
等待成功
