記一次spring5源碼的完整編譯過程

學(xué)習(xí)java已有3年之久,spring一直停留在應(yīng)用階段,兩次面試阿里的經(jīng)歷讓我深感學(xué)習(xí)spring源碼的重要性,廢話不多說,開搞!
1、環(huán)境:
jdk1.8+spring5+gradle4.7+eclipse4.6
如果要參考該教程,環(huán)境最好一樣(eclipse除外),因為以前編譯過spring3,由于環(huán)境問題折騰了好久。
2、檢測jdk版本java -version

由于此次編譯的是spring5,jdk版本不能太低
2、下載spring源碼
spring源碼托管在github上:https://github.com/spring-projects/spring-framework(還沒安裝git的同學(xué)是時候?qū)W習(xí)一下了,不過此次編譯可以不依賴git)

下載下來解壓:

3、安裝gradle(一款基于Groovy的構(gòu)建工具,比maven更簡潔)
傳送門:https://gradle.org/releases/
選擇4.7版本下載
設(shè)置環(huán)境變量:
新建用戶變量GRADLE_HOME,值為gradle的安裝目錄,我的安裝目錄如下:

設(shè)置環(huán)境變量:

檢測gradle是否安裝成功:

出現(xiàn)上圖說明安裝成功
4、將spring工程轉(zhuǎn)換成eclipse可識別的工程
進(jìn)入spring的解壓目錄,執(zhí)行下面命令:
gradle?cleanidea eclipse(網(wǎng)上普遍反應(yīng)這個步驟會報錯,反正我是一次通過,以前編譯spring3的時候在這里的確折騰了很久)
此時直接導(dǎo)入eclipse spring-core工程會報錯缺少jar包:spring-cglib-repack-x.x.x.jar、spring-objenesis-repack-x.x.jar
要在spring的解壓目錄下執(zhí)行下面這兩個命令:
gradle?objenesisRepackJar
gradle cglibRepackJar5.此時你可以把spring工程導(dǎo)入到eclipse了

先導(dǎo)入spring-jcl,不然spring-core會報錯(這些工程之間的依賴關(guān)系自己去摸索吧)
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默認(rèn)是2.6版本,查看groovy編譯版本方式:windows->perferences->groovy

我已經(jīng)改好了,注意這里不要想當(dāng)然的選下面的Switch to試圖切換編譯版本,本人親測行不通,不過可以用下面的方式:
Help->Install?New?Software
找到安裝的groovy的插件(我的已經(jīng)刪了卸載了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的解壓目錄下執(zhí)行下面命令
1.gradle?genCastor
2.gradle?genJaxb然后去spring-oxm/build/classes下面看看,如果已生成jar包則應(yīng)該不會再報錯(記得clean一下)
不過我這里有些奇怪,執(zhí)行上面兩條命令后竟然生成的是解壓后的文件,如果你也一樣的話,還要繼續(xù)以下步驟:
在classes目錄下分別執(zhí)行下面兩條命令(自己打jar包):
jar?cvf?jaxb.jar?jaxb\org
jar?cvf?castor.jar?castor\org然后回到eclipse,右鍵spring-oxm->build Path:
在Libraries中把原本的castor和jaxb刪除,然后再重新導(dǎo)入我們手動打的jar包
到此為止,spring5的源碼導(dǎo)入算是成功了:

出處:csdn.net/coder_no/article/details/83315981
點個“在看”哦!
