Spring 5.2.x 原始碼環境搭建(Windows 系統環境下)
阿新 • • 發佈:2020-07-08
本文參考自部落格 https://blog.csdn.net/qq_41907991/article/details/107101967,有改動。
參考官方文件:
https://github.com/spring-projects/spring-framework/wiki/Build-from-Source
https://github.com/spring-projects/spring-framework/blob/master/import-into-idea.md
## 前期準備
1、確保本機已經安裝好了 Git
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707222635634-1817419039.png)
2、Jdk 版本至少為 1.8
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707222704571-640095110.png)
3、安裝好 IntelliJ IDEA (其他開發工具,如 eclipse、Spring Tool Suite 等也是可以的),因為使用 IDEA 可以直接比較版本間的差異,如圖所示:
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707230934106-759210413.gif)
## 原始碼構建
1、獲取 Spring 原始碼
在需要使用 git clone 命令的方式將原始碼拉取到本地,命令如下:
```java
git clone https://github.com/spring-projects/spring-framework.git
```
然後切換到 5.2.x 分支,命令如下:
```java
git checkout origin/5.2.x
```
這個過程可能會耗費比較長的時間,此外還可以直接下載原始碼壓縮包,如圖所示:
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707223527235-705710842.png)
2、新增阿里雲映象
在編譯過程中,Spring 會自動下載依賴包,預設使用的是官方映象,下載比較慢,所以我們提前新增好國內映象,將下面這行程式碼貼上到 build.gradle 檔案中的 repositories 節點下即可:
```java
//新增阿里雲映象
maven { url "http://maven.aliyun.com/nexus/content/groups/public" }
```
如下圖所示:
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707231009113-237953813.gif)
3、預先編譯 spring-oxm 模組
開啟命令列視窗,並切換到原始碼所在資料夾,執行以下命令:
```java
gradlew :spring-oxm:compileTestJava
```
出現 BUILD SUCCESS 字樣時說明構建成功。
4、根據編譯後的原始碼下載並安裝對應的版本的 Gradle
在完成 spring-oxm 模組的編譯後,會在當前目錄生成一個 .gradle 的資料夾:
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707224333299-1457992857.png)
開啟後可以檢視對應的 Gradle 版本:
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707224344372-1549293404.png)
可以直接在 https://gradle.org/releases/ 網站上下載對應的版本,注意要選擇 binary-only 的。
安裝好後記得配置 Gradle 的環境變數:
新增 GRADLE_HOME 環境變數,指向 Gradle 解壓目錄
配置 Path 環境變數:追加 %GRADLE_HOME%\bin
之後測試是否安裝成,在命令列中輸入:gradle -v 即可檢視版本。
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707224856696-281346760.png)
5、給 Gradle 配置國內映象
進入 Gradl e安裝目錄,在 init.d 目錄下新建 init.gradle 檔案,並新增以下內容:
```properties
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
}
}
}
```
操作步驟如下圖所示:
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707231043967-1839506726.gif)
6、將程式碼匯入到 IDEA 中
6.1、開啟 IDEA 並選擇匯入專案
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707225243046-1330948557.png)
6.2、選擇匯入一個 Gradle 專案
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707225305147-1668016484.png)
6.3、配置匯入的專案
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707225321737-323626707.png)
點選 Finish 後等待 IDEA 構建完專案,如果配置了 Gradle 的國內映象,這個過程應該不會太久。構建完成後整個專案結構如下:
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707225419452-1164675611.png)
如果你跟我一樣是直接檢出的程式碼,記得將分支切換到 5.2.x,如圖所示:
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707231142912-1920128443.gif)
7、構建整個專案
選擇 Build > Build Project
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707225513876-828735051.png)
## 可能出現的問題
1、AnnotationCacheAspect找不到符號
在這個過程中你可能會碰到如下錯誤:
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707225551377-1574405121.png)
這是因為AnnotationCacheAspect.aj 不是java檔案需要另外的aspectj進行處理,可以按照以下步驟解決這個問題
- 下載aspectj,對應連結:https://www.eclipse.org/downloads/download.php?file=/tools/aspectj/aspectj-1.9.5.jar
- 安裝aspectj
開啟命令列,cd到AspectJ的jar包所在的資料夾,執行java -jar aspectj-1.9.4.jar命令,開啟AspectJ的安裝介面,直接點選Next,如下圖:
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707225619224-1824621035.png)
接著選擇 jdk 的安裝路徑,繼續 Next:
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707225636097-1398467069.png)
接著選擇 AspectJ 的安裝路徑,然後 Install 安裝:
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707225701666-1836968214.png)
2、IDEA 中配置 aspectj
確保以下兩個外掛已經被啟用
- Spring AOP/@AspectJ
- AspectJ Support
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707225746130-2001433227.png)
將編譯器改為 Ajc,接著設定Ajc的安裝目錄,選擇到aspectjtools.jar,同時,一定要將Delegate to Javac選項打鉤,這個代理設定的作用只對指定的專案進行Ajc編譯,其他的專案還是用預設的javac編譯器編譯。如果不勾選這個代理選項,則全部專案都使用Ajc編譯器編譯,可能會導致編譯錯誤。
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707225808576-1680820488.png)
3、指定需要使用 Ajc 編譯的專案
分別為 spring-aop 及 spring-aspects 新增 Facets 屬性。
點選 File --> Project Structure --> Facets,選擇 spring-aop.main,點選 OK
點選 File --> Project Structure --> Facets,選擇 spring-aspects.main,點選 OK
完成新增,如下圖所示:
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707231225797-733522081.gif)
完成上述步驟後,再次選擇Build > Build Project,成功完成編譯
## 新增測試模組
1、右鍵工程名 —> new —> module
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707230008634-880390308.png)
2、選擇 Gradle 及 Java
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707230024714-1550355671.png)
3、輸入模組名稱
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707230035756-407015419.png)
點選 next —> Finish 完成測試模組的建立
最後,新增一些必要的依賴,修改建立好的模組中的 build.gradle 檔案,新增如下三個依賴:
```java
compile(project(":spring-aop"))
compile(project(":spring-context"))
optional("org.aspectj:aspectjweaver")
```
如下圖所示:
![](https://img2020.cnblogs.com/blog/1036655/202007/1036655-20200707231304811-1469995705.gif)
至此就完成了整個 Spring 原始碼的編譯,並且建立了一個可供日後學習使用的模組!
最後,附一個《Spring 原始碼分析環境搭建》的短視訊:
https://mp.weixin.qq.com/s?__biz=MzI1NDY0MTkzNQ==&mid=2247489263&idx=1&sn=e1a7fc61d7e70b0efc72eefdf801fdc1&chksm=e9c3448fdeb4cd998d3e27be2e34e1f1671424d47f89c13b438757172fcacc8f24133b6c184d&scene=0&xtrack=1&sharer_openid=oD-X9wbS9SNIgdo-cU1KSgaVDLMI&sharer_sharetime=1594086081&srcid=0707h1zc3CJh0Tj1ZTI6lWfP&appmsg_type=9&comment_topic_id=1416925302537945088&vid=wxv_1416892460432982017&key=526e2243123993b78029305c42b4fc3cb7bc97e2338c49a67adcea6480bbdc71d262a875338cc7fe7c37dcd20b8bc80460b3d1c6be3bcc3adf4fe80133fb958a048f9654e7f33fdf1973a2d0ed1aec5e&ascene=1&uin=Mjc1MjQ2NjIzMw%3D%3D&devicetype=Windows+10+x64&version=62090529&lang=zh_CN&exportkey=A8ExT4eBkJOMUoxxBJpyXgE%3D&pass_ticket=klCLGZHEFBWZf22NYbYJM5EP5u96wC4NwlHYdGKbqnnHfpvPcIMolOiwP