­

spring源碼編譯完整步驟拿來即用!

1.版本選擇

1)源碼版本:spring5.3.x

2)gradle版本:根據spring源碼的工程路徑:gradle/wrapper/gradle-wrapper.properties文件查看gradle版本。如圖所示:

 可以看到源碼版本對應gradle版本為,所以可依此下載gradle-7.2版本,注意這裡請保留gradle-7.2的zip壓縮包,後面會用到

3)JDK版本:可以根據如下路徑中的ide.gradle選擇JDK版本,這裡是JDK1.8

4)IDEA版本:盡量選擇較高版本:我用的是2021.3.2版本

2.環境準備

1)gradle安裝並配置環境變量,此步驟可自行百度

2)ieda配置gradle的存儲jar包倉庫,如圖所示:

 進入idea的全局設置,可以先打開一個工程,然後再file選項下選擇close project 關閉工程可回到此界面

 

 在這裡配置gradle倉庫路徑,用來存儲gradle編譯spring源碼時下載的各種jar包

3)spring源碼工程構建前相關文件修改配置

  1.maven倉庫下載路徑修改:因為github下載的源碼中maven倉庫路徑是國外地址,此處可更改為阿里雲倉庫,gradle編譯時下載jar包速度會極大提升

  文件路徑: spring-framework/build.gradle

  在build.gradle文件中找到repositories 代碼塊,配置如下路徑,或者可以自行登錄 【阿里雲maven倉庫地址://developer.aliyun.com/mvn/guide】選擇url路徑配置

 

repositories {
	maven { url "//maven.aliyun.com/repository/public" }
	maven { url "//maven.aliyun.com/repository/apache-snapshots" }
	maven { url "//maven.aliyun.com/repository/gradle-plugin" }
	maven { url "//repo.springsource.org/plugins-release" }//國外路徑
	maven { url "//repo.spring.io/libs-spring-framework-build" }//原始路徑
	mavenCentral()
}

  

 

 

   2.gradle/wrapper/gradle-wrapper.properties文件修改

  默認文件配置如圖所示,當我們將項目導入idea時會根據標紅地址下載gradle-7.2-bin.zip壓縮包,由於前面我們自行下載並配置了gradle,不需要重新下載

 

 

修改為如下路徑:即存放 gradle-7.2-bin.zip文件的路徑

distributionUrl=file\:///D:/Java/gradle-7.2/gradle-7.2-bin.zip

3.spring源碼導入ieda

 1)直接選擇open打開工程

 

2)此時idea會為源碼項目創建工作空間,等待創建完成後會立即開始構建項目,我們不要着急構建項目,還需要在IDEA中為spring源碼項目配置gradle和JDK,點擊停止按鈕打斷構建,如下所示

 

 3)給項目配置gradle和jdk

  配置如下圖:先配置圖一再配置圖二,

   file->project Structure->project

 

  file->settings->gradle

  點擊確認後,項目就會開始自動build,此時無需其他操作。

 

 4.開始構建

  1)當所有模塊build完成後,提示finished表示成功

  如下的報錯信息可以忽略,這個是與git相關的報錯信息,不影響spring源碼編譯

  2)為確保所有模塊都構建成功,這裡可以參考官方spring源碼工程中的 import-into-idea.md文檔描述:先編譯spring-oxm模塊

在gradle中使用spring-oxm的 compileTestJava選項編譯此模塊(雙擊運行即可),具體位置如圖

   3)此時再選擇spring下的build選項編譯整個源碼項目

 

 4)編譯過程中出現spring-web模塊編譯失敗。如下

 注意報錯的類和報錯行:Jackson2JsonEncoderTests.java 的253行,找到這個類,將253行注釋掉,如下:

為什麼要注釋掉:隨意測試出來的,看過這個 jacksonValueUnwrappedBeforeObjectMapperSelection()方法的提交記錄 是由spring團隊2022.3.16提交的,注釋掉不知道是否會影響spring-web模塊的引用。

 

 5)重新build ,即重複 3)步驟,編譯成功

 至此,spring源碼編譯就成功了

5.新建模塊用於測試

此步驟省略不寫,主要記錄幾個踩過的坑

1.gradle7版本和gradle5版本之間用重大升級更新 舊版本的compile關鍵字在新版本中已經棄用 ,換為 implementation關鍵字,引用項目時需要注意

 

 2.新建模塊並且已經引入了其他模塊,編碼測試時發現引入項目沒生效

此時應該要檢查自己gradle編譯工具的新建模塊下的runtimeClasspath下有沒有自己引入的模塊,沒有就說明引用沒成功

解決辦法:

先將新建模塊下的測試代碼(引用其他項目中類的代碼)注釋掉,再重新build整個spring項目,就可以引用成功了

 6.spring源碼項目的拉取的技巧分享

step1:先登錄自己的github賬號,將spring-framework 項目fork到自己的github倉庫,複製fork到自己的spring源碼倉庫的url

step2:登錄自己的gitee的賬號,選擇從github導入倉庫

 

將url填寫到如下位置,點擊導入即可將源碼項目複製到自己的gitee中,從本地拉取速度會相當快,也可以提交自己測試代碼用於總結學習