環(huán)境配置
安裝JDK茴恰、idea并做好相對應(yīng)的配置岁经,JDK建議使用8或者11
本案例使用的JDK版本是:1.8.0_221
下載Spring源碼
1. 訪問spring官網(wǎng):https://spring.io/汁蝶,點(diǎn)擊Projects
2. 點(diǎn)擊Spring Framework着帽,進(jìn)入下面界面
3. 點(diǎn)擊github圖標(biāo)揣钦,在github上下載相關(guān)源碼(因?yàn)閟pring源碼托管到github上),之后進(jìn)入github的界面
4. 在Branch下面選擇Tags為v5.2.0.RELEASE(選擇RELEASE版本涨岁,RELEASE版本正式發(fā)布上線的拐袜,功能比較穩(wěn)定),選擇好版本之后梢薪,點(diǎn)擊Code按鈕蹬铺,最后選擇Download ZIP開始下載zip包。
5. 下載之后將ZIP包放到指定的路徑(路徑根據(jù)個人情況做修改秉撇,可自定義)
6. 解壓ZIP包
unzip spring-framework-5.2.0.RELEASE.zip
以上完成了源碼的下載和解壓
編譯Spring源碼
1. 查看github提供了相關(guān)編譯的文檔說明即如何從源碼中編譯出spring框架甜攀,在下載的第三步驟的頁面,向下拉琐馆,找到“Build from Source”赴邻,然后點(diǎn)擊“Build from Source”鏈接
2. 點(diǎn)擊進(jìn)去之后在“Before You Start ”中可以看到環(huán)境的要求,建議使用JDK8或者JDK11
在IDEA中進(jìn)行編譯啡捶,選擇“Import into your IDE”--->"IntelliJ IDEA"鏈接
安裝步驟
第一步:導(dǎo)入IDEA之前,預(yù)編譯spring-oxm板塊奸焙。進(jìn)入解壓之后的spring源碼目錄瞎暑。
打開build.gradle文件,修改一下gradle相關(guān)配置与帆,方便項(xiàng)目很快的下載相關(guān)依賴了赌。在首行即plugins上方,buildscript里面加入一下內(nèi)容(配置gradle的依賴)
repositories { ? ? ? ?
?? maven{ url 'https://maven.aliyun.com/nexus/content/groups/public/' } ? ? ? ?
?? maven{ url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'} ? ?
}
在 resolutionStrategy的下方玄糟,configurations.all的上方加入(配置項(xiàng)目的依賴)
maven{ url 'https://maven.aliyun.com/nexus/content/groups/public/'}
maven{ url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
回到spring官方文檔勿她,執(zhí)行./gradlew :spring-oxm:compileTestJava
第二步:將spring源碼的項(xiàng)目導(dǎo)入IDEA中
File -> New -> Project from Existing Sources -> Navigate to directory -> Select build.gradle
第三步:排除spring-aspects模塊,spring-aspects有自己的編譯器阵翎,會影響jvm的加載逢并,所以要移除
第四步:開始編碼,以上完成spring的編譯
以上完成了spring的編譯郭卫,如果有些依賴沒有下載下來砍聊,可以手動的添加相關(guān)的jar包,可以在Known issues查看已知的issues
常見問題
1. The IDE modules below were removed by the Gradle project reload:springdemo
創(chuàng)建modules之后出現(xiàn)一下的頁面贰军,點(diǎn)擊“open a dialog”
點(diǎn)擊“open a dialog”之后出現(xiàn)一下界面玻蝌,點(diǎn)擊ok按鈕
2. 在spring源碼里創(chuàng)建模塊,創(chuàng)建模塊目錄如下:
我的解決方案是:刪除該模塊,重新創(chuàng)建俯树,重新創(chuàng)建的時候只是修改了一下jdk版本(從jdk8換成了11)就可以了帘腹,猜測是創(chuàng)建模塊的jdk和spring源碼項(xiàng)目使用的版本不一致