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


1.版本選擇

(1)源碼版本:

​ spring5.3.x

(2)gradle版本:

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

img

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

(3)JDK版本:

​ 可以根據如下路徑中的ide.gradle選擇JDK版本,這里是JDK1.8

img

(4)IDEA版本:

​ 盡量選擇較高版本:我用的是2021.3.2版本

2.環境准備

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

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

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

img

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

img

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

   1.maven倉庫下載路徑修改:
   因為github下載的源碼中maven倉庫路徑是國外地址,此處可更改為阿里雲倉庫,gradle編譯時下載jar包速度會極大提升
   文件路徑: spring-framework/build.gradle
   在build.gradle文件中找到repositories 代碼塊,配置如下路徑,或者可以自行登錄 【阿里雲maven倉庫地址:https://developer.aliyun.com/mvn/guide 】選擇url路徑配置

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

  

img

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

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

img

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

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

3.spring源碼導入ieda

(1)直接選擇open打開工程

img

(2)IDEA中配置gradle和JDK

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

img

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

 file->project Structure->project

img

  file->settings->gradle

img

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

4.構建spring源碼

(1)build(構建)

​ 上一步配置完idea中的gradle后,點擊確認會自動開始構建,當所有模塊build完成后,提示finished表示成功

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

img

(2)編譯spring-oxm模塊

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

img

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

img

(3)build整個項目

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

img

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

img

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

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

img

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

img

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

5.新建模塊用於測試

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

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

img

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

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

img

解決辦法:

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

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

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

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

img

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

img


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM