本文參考自博客 https://blog.csdn.net/qq_41907991/article/details/107101967,有改動。php
參考官方文檔:
https://github.com/spring-projects/spring-framework/wiki/Build-from-Source
https://github.com/spring-projects/spring-framework/blob/master/import-into-idea.mdjava
一、確保本機已經安裝好了 Git
git
二、Jdk 版本至少爲 1.8
github
三、安裝好 IntelliJ IDEA (其餘開發工具,如 eclipse、Spring Tool Suite 等也是能夠的),由於使用 IDEA 能夠直接比較版本間的差別,如圖所示:
spring
一、獲取 Spring 源碼
在須要使用 git clone 命令的方式將源碼拉取到本地,命令以下:app
git clone https://github.com/spring-projects/spring-framework.git
而後切換到 5.2.x 分支,命令以下:eclipse
git checkout origin/5.2.x
這個過程可能會耗費比較長的時間,此外還能夠直接下載源碼壓縮包,如圖所示:
maven
二、添加阿里雲鏡像
在編譯過程當中,Spring 會自動下載依賴包,默認使用的是官方鏡像,下載比較慢,因此咱們提早添加好國內鏡像,將下面這行代碼粘貼到 build.gradle 文件中的 repositories 節點下便可:ide
//添加阿里雲鏡像 maven { url "http://maven.aliyun.com/nexus/content/groups/public" }
以下圖所示:
工具
三、預先編譯 spring-oxm 模塊
打開命令行窗口,並切換到源碼所在文件夾,執行如下命令:
gradlew :spring-oxm:compileTestJava
出現 BUILD SUCCESS 字樣時說明構建成功。
四、根據編譯後的源碼下載並安裝對應的版本的 Gradle
在完成 spring-oxm 模塊的編譯後,會在當前目錄生成一個 .gradle 的文件夾:
打開後能夠查看對應的 Gradle 版本:
能夠直接在 https://gradle.org/releases/ 網站上下載對應的版本,注意要選擇 binary-only 的。
安裝好後記得配置 Gradle 的環境變量:
新增 GRADLE_HOME 環境變量,指向 Gradle 解壓目錄
配置 Path 環境變量:追加 %GRADLE_HOME%\bin
以後測試是否安裝成,在命令行中輸入:gradle -v 便可查看版本。
五、給 Gradle 配置國內鏡像
進入 Gradl e安裝目錄,在 init.d 目錄下新建 init.gradle 文件,並添加如下內容:
allprojects{ repositories { def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/' all { ArtifactRepository repo -> def url = repo.url.toString() if ((repo instanceof MavenArtifactRepository) && (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com'))) { project.logger.lifecycle 'Repository ${repo.url} replaced by $REPOSITORY_URL .' remove repo } } maven { url REPOSITORY_URL } } }
操做步驟以下圖所示:
六、將代碼導入到 IDEA 中
6.一、打開 IDEA 並選擇導入項目
6.二、選擇導入一個 Gradle 項目
6.三、配置導入的項目
點擊 Finish 後等待 IDEA 構建完項目,若是配置了 Gradle 的國內鏡像,這個過程應該不會過久。構建完成後整個項目結構以下:
若是你跟我同樣是直接檢出的代碼,記得將分支切換到 5.2.x,如圖所示:
七、構建整個項目
選擇 Build > Build Project
一、AnnotationCacheAspect找不到符號
在這個過程當中你可能會碰到以下錯誤:
這是由於AnnotationCacheAspect.aj 不是java文件須要另外的aspectj進行處理,能夠按照如下步驟解決這個問題
打開命令行,cd到AspectJ的jar包所在的文件夾,運行java -jar aspectj-1.9.4.jar命令,打開AspectJ的安裝界面,直接點擊Next,以下圖:
接着選擇 jdk 的安裝路徑,繼續 Next:
接着選擇 AspectJ 的安裝路徑,而後 Install 安裝:
二、IDEA 中配置 aspectj
確保如下兩個插件已經被激活
將編譯器改成 Ajc,接着設置Ajc的安裝目錄,選擇到aspectjtools.jar,同時,必定要將Delegate to Javac選項打鉤,這個代理設置的做用只對指定的項目進行Ajc編譯,其餘的項目仍是用默認的javac編譯器編譯。若是不勾選這個代理選項,則所有項目都使用Ajc編譯器編譯,可能會致使編譯錯誤。
三、指定須要使用 Ajc 編譯的項目
分別爲 spring-aop 及 spring-aspects 添加 Facets 屬性。
點擊 File --> Project Structure --> Facets,選擇 spring-aop.main,點擊 OK
點擊 File --> Project Structure --> Facets,選擇 spring-aspects.main,點擊 OK
完成添加,以下圖所示:
完成上述步驟後,再次選擇Build > Build Project,成功完成編譯
一、右鍵工程名 —> new —> module
二、選擇 Gradle 及 Java
三、輸入模塊名稱
點擊 next —> Finish 完成測試模塊的建立
最後,添加一些必要的依賴,修改建立好的模塊中的 build.gradle 文件,添加以下三個依賴:
compile(project(":spring-aop")) compile(project(":spring-context")) optional("org.aspectj:aspectjweaver")
以下圖所示:
至此就完成了整個 Spring 源碼的編譯,而且建立了一個可供往後學習使用的模塊!