Spring 5.1源碼編譯

版本工具:IntelliJ IDEA 2018-3,gradle4.9,jdk1.8.0_181,spring5.1.x, kotlin1.2.41,groovy2.4.12,

編譯spring源碼的方式有很多方式,小編知道的就有兩種,一種是gradle編譯,一種是藉助編輯工具編譯,比如說eclipse和IDEA,這裏就拿IDEA舉例說明。

gradle 和 jdk的安裝這裏就不再複述,度娘查一下很easy,基本操作,下面直接開始源碼編譯。

  1. 導入之前,我們先看源碼根目錄中的import-into-idea.md文件

注意幾點:

  1. 因爲其他項目需要依賴spring-core和spring-oxm,所以我們導入後需要先編譯這兩個包
  2. spring-aspects需要依賴三方jar,所以這裏編譯可能會報錯,但是不影響我們編譯使用,讓我們忽略這個錯誤
  3. 使用工具編譯時,我們需要調整寫參數避免出現內存溢出導致編譯不通過    -XX:MaxPermSize=2048m -Xmx2048m -XX:MaxHeapSize=2048m
  4. 在IDE中編譯spring的源碼,必須要先生成spring-oxm模塊的資源
  1. 將源碼導入到IDEA(將源碼導入IDEA有兩種方式), 源碼地址:https://github.com/spring-projects/spring-framework.git
    1. 將源碼下載到本地,解壓之後導入到IDEA中
    2. 使用IDEA的git插件,直接從github上將代碼導入到項目中
  2. 首先我們打開IDEA,選擇地下的check pout from version control,選擇git方式
  3. 輸入源碼地址和本地的目錄,然後等待源碼下載完成
  4. 選擇使用gradle方式導入
  5. 注意截圖部分中的配置項,選擇自己本地安裝的gradle,jdk的版本要1.8以上,對應的虛擬機參數調整
  6. 點擊Finish,等到IDEA導入成功之後,我們切換下代碼的版本,當前down下來的最新的是master版本,這裏我們要編譯的是5.1x版本,切換到版本5.1x後,IDEA會自動構建
  7. 項目在構建項目的時候可能會出現以下錯誤
    1. No such property: immutableValues for class: org.gradle.api.internal.tasks.DefaultTaskDependency,圖截圖所示錯誤解決辦法:註釋模塊spring-bean中的spring-bean.gradle文件中的截圖部分代碼
    2. Could not find method useJUnitPlatform() for arguments ,錯誤如圖所示解決辦法:註釋掉模塊spring-test中的spring-test.gradle文件中的截圖部分代碼
    3. 小編在build兩次之後,只出現了以上兩處錯誤
  8. 下面開始編譯spring-core的代碼
  9. 以同樣的方式分別去編譯sping-bean spring-context spring-oxm模塊
    1. run test的時候,可能會出現以下錯誤。產生問題的原因:sping-core會依賴兩個核心的jar    解決方法:cmd窗口進入到sprng-core目錄,執行命令gradle build,直到出現BUILD SUCCESSFUL,如圖所示:
    2. 出現這個異常Kotlin: Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: 解決方法:在cmd窗口查看自己kotlin的版本
    3. 修改工程根目錄下的build.gradle文件中的對應kotlin版本號(編譯通過後,小編無意還原了github上的代碼,kotlin的版本回滾到了1.2.71,發現並不會影響到源碼的編譯,這個可以忽略,但是也可以作爲一個參考點)
    4. 以及IDEA編輯器中的kotlin版本
    5. 重新run test。 在run test其他模塊的過程中,可能會出現,有些錯誤是可以忽略的,在你無法鑑定這個錯誤是不是可以忽略的時候,你就直接執行下面的步驟,新增module來測試代碼能不能運行,debug能不能調試到spring源碼中去,這裏好像沒有一個絕對的標準
  10. 新增Module來測試源碼編譯是否通過
    1. 右鍵spring工程,新增一個module
    2. 選擇gradle Module,下一步
    3. 輸入模塊名稱,下一步,然後finish,新增module成功
    4. 維護新增module對spring-context的依賴關係
    5. 編寫測試代碼
    6. 右鍵run Test.Main,查看輸出結果
  11. 至此,sping源碼在IDEA中編譯完成,大功告成。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章