javascript
Spring源码下载编译阅读
1.前言:
經過多次拉取Spring源碼編譯失敗經歷,一下抓取配置編譯過程各個軟件版本可能有影響因此先做以記錄(時間不同也會導致版本出入要注意)
 Idea:2020.1.1(參考文獻博主2019.3.3版本也可)
 插件:maven(3.6.3)(未用到)Gradle (4.10.3) Kotlin(idea內裝)
 JDK:原機安裝1.8版本 需要11版本(后續會說明JDK1.8問題)
 注:流程可能較長,源碼拉取編譯不易,耐心閱讀
2.流程
2.1抓取Spring源碼
GITHUB網址:https://github.com/spring-projects/spring-framework
 注意筆者:2020.12.9抓取版本 (v5.3.3-SNAPSHOT)版本可能會導致后期配置時的不適,同時碼云上也有Springframework版本 暫未以此測試過
2.2gradle下載及安裝
獲取gradle-4.10.3,地址為:https://services.gradle.org/distributions/
 
,這里我們只選擇安裝文件即可,下載完畢后解壓到相應目錄即可(建議全英文目錄) 直接訪問該網址下載可能較慢,可搭”梯子“
 配置環境變量同java:
 
 建立系統變量GRADLE_HOME 值為解壓目錄中bin文件夾的上一級目錄(bin在這個目錄下)
 
 編輯PATH系統變量
 配置完成以后win+r,輸入cmd進入dos界面,鍵入命令gradle -v,查看版本信息確保配置無誤
 
 此時可以打開idea配置
 File->Settings
 安裝插件Gradle(該版本idea安裝插件都需要重啟)
 
File->Settings->Gradle 配置相關信息 Gradle user home 和剛剛環境變量配置路徑一致bin上級目錄
 
3.準備編譯:
準備創建項目
 
 選擇拉取的項目路徑:
 
 選擇導入模式
 
 選擇在新窗口打開編譯
 此時需要確認剛剛的Gradle配置是否無誤打開File->Setttings ->Gradle 查看對比
 此時可以看到項目開始加載下載,畫圈處會有進度條或者直接以彈窗形式 該步驟需要等待較長時間
 懷疑是因為Gradle沒有配置國內鏡像(類是maven) 這個大家可以查閱相關配置資料嘗試
 筆者下載三小時左右完成
 
 下載編譯完成右側gradle框如圖所示 控制臺也會有成功提示(截圖控制臺顯示是模擬的因為安裝好了)
 需要談到一點,網上教程此處直接下載編譯成功,筆者測試時有一次報錯,jar包下載錯誤(懷疑是網絡不穩定導致)如圖點擊reimport按鈕可以再次嘗試 完成
 
 接下來可以在其中創建工程測試項目(注意此時源碼可以注釋修改 ,編譯運行還可能有錯因此還有記錄)
4創建項目測試
項目中右鍵新建項目
 畫圈處是筆者后續編譯出錯的一個原因 應該是要JDK 11 否則spring-core包中有個java依賴找不到
 
 
 這個時候需要修改build.gradle文件(類似于maven關聯其他模塊否則不能使用項目下其他包類)
 內容如下
在默認生成文件下添加了該行
 
 刷新配置加載:
 
 正常編寫spring代碼運行后如圖所示錯誤:
 
5這里面有三個問題:
1.
 Error:(354, 51) java: 找不到符號
 符號: 變量 CoroutinesUtils
 位置: 類 org.springframework.core.ReactiveAdapterRegistry.CoroutinesRegistrar
 2.程序包jdk.jfr不存在
 3.缺少 cglib 和 objenesis 包
 Kotlin: warnings found and -Weeror specified
問題1解決:
 
 添加依賴包 該包項目中有 在源碼目錄項目spring-core/kotlin-coroutines/build/libs下
 
 選擇
 即可解決
問題2解決:
更換idea的JDK為JDK11(注意這個可以官網下載安裝即可不需要配置到環境變量去使用那么麻煩)
 本地有相關JDK11包即可
 
 
問題3解決:
emmm這個應該不算是問題 只是自己沒有學過gradle 不太清楚運行流程原理
 右側Gradle中找到spring-core模塊的tasks/other下
 
 找到:cglibRepackJar 和 objenesisRepackJar把雙擊加載即可
 此時整個spring框架加載編譯完成可以自己編寫代碼測試,開啟閱讀源碼
 
總結
以上是生活随笔為你收集整理的Spring源码下载编译阅读的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 面向对象chapter1
 - 下一篇: C++类的构造函数 后单冒号加基类 例如