記一次spring5原始碼完整編譯過程
學習java已有3年之久,spring一直停留在應用階段,兩次面試阿里的經歷讓我深感學習spring原始碼的重要性,廢話不多說,開搞!
1、環境:
jdk1.8+spring5+gradle4.7+eclipse4.6
如果要參考該教程,環境最好一樣(eclipse除外),因為以前編譯過spring3,由於環境問題折騰了好久
2、檢測jdk版本java -version
由於此次編譯的是spring5,jdk版本不能太低
2、下載spring原始碼
下載下來解壓:
3、安裝gradle(一款基於Groovy的構建工具,比maven更簡潔)
選擇4.7版本下載
設定環境變數:
新建使用者變數GRADLE_HOME,值為gradle的安裝目錄,我的安裝目錄如下:
設定環境變數:
檢測gradle是否安裝成功:
出現上圖說明安裝成功
4、將spring工程轉換成eclipse可識別的工程
進入spring的解壓目錄,執行下面命令:
gradle cleanidea eclipse
(網上普遍反應這個步驟會報錯,反正我是一次通過,以前編譯spring3的時候在這裡的確折騰了很久)
此時直接匯入eclipse spring-core工程會報錯缺少jar包:spring-cglib-repack-x.x.x.jar、spring-objenesis-repack-x.x.jar
要在spring的解壓目錄下執行下面這兩個命令:
gradle objenesisRepackJar
gradle cglibRepackJar
5.此時你可以把spring工程匯入到eclipse了
先匯入spring-jcl,不然spring-core會報錯(這些工程之間的依賴關係自己去摸索吧)
6、解決spring-bean工程的程式碼報錯
缺少groovy外掛,
安裝groovy外掛:
在eclipse的 Help -> Install New Software 中,新增groovy的下載連線:
http://dist.springsource.org/snapshot/GRECLIPSE/e4.6/(這裡最後的e4.6代表你eclipse的版本別搞錯了,不然安裝不成功別找我)
這個安裝groovy外掛話說有點坑,開了vpn速度也提不上去,哪位老鐵有好的方法煩請告知一聲哈
7、安裝groovy外掛後會報一個groovy編譯版本的錯誤,spring5用的是2.5的編譯版本,而我們下載的groovy預設是2.6版本,檢視groovy編譯版本方式:windows->perferences->groovy
我已經改好了,注意這裡不要想當然的選下面的Switch to試圖切換編譯版本,本人親測行不通,不過可以用下面的方式:
Help->Install New Software
找到安裝的groovy的外掛(我的已經刪了解除安裝了2.6和2.4版本的了):
原本有2.4、2.5和2.6三個編譯版本,我們把2.4和2.6的給解除安裝了(選中2.4和2.6點選下面的Uninstall按鈕),然後重啟eclipse
8、解決spring-oxm報錯問題(缺少castor和jax)
在spring的解壓目錄下執行下面命令
1.gradle genCastor
2.gradle genJaxb
然後去spring-oxm/build/classes下面看看,如果已生成jar包則應該不會再報錯(記得clean一下)
不過我這裡有些奇怪,執行上面兩條命令後竟然生成的是解壓後的檔案,如果你也一樣的話,還要繼續以下步驟:
在classes目錄下分別執行下面兩條命令(自己打jar包):
jar cvf jaxb.jar jaxb\org
jar cvf castor.jar castor\org
然後回到eclipse,右鍵spring-oxm->build Path:
在Libraries中把原本的castor和jaxb刪除,然後再重新匯入我們手動打的jar包
到此為止,spring5的原始碼匯入算是成功了:
如果按照此教程還有什麼問題可以提出來一起看下