Spring原始碼編譯過程
版本整理:
Spring版本:5.2.0.RELEASE
JDK版本:1.8.0_151
IDEA版本:2018.2.3
Gradle:目前不需要安裝,在編譯完成後根據提示安裝對應版本即可
一、Spring原始碼下載
1.進入Spring官網https://spring.io/,跳轉到頁面最下方git連結,點選進入github
2.在git中進入Spring-framework倉庫
3.選擇要下載的Spring分支版本,推薦下載release版本,因為這種版本屬於穩定版,我下載的是5.2.0.RELEASE,選擇方式如下圖
4.進行壓縮包下載
5.此時我們Spring原始碼已經下載完成,解壓後放到工作空間中
二、編譯程式碼
1.新增阿里雲映象
在編譯過程中,Spring會去自動下載一些依賴的包,預設使用的是官方的映象,下載比較慢,所以我們提前新增好國內映象,將下面這行程式碼貼上到build.gradle
檔案中的repositories
節點下即可
maven{url"http://maven.aliyun.com/nexus/content/groups/public"}
2.預編譯spring-oxm模組
開啟命令列視窗,並切換到原始碼所在資料夾,執行以下命令
gradlew:spring-oxm:compileTestJava
出現BUILD SUCCESS
字樣時說明構建成功,如下圖所示
注意:此處由於網路原因可能會編譯失敗,多試幾次直到出現BUILD SUCCESS為止。
3.根據編譯後的原始碼下載並安裝對應版本Gradle
在完成對spring-oxm
模組的編譯後,會在當前目錄生成一個.gradle
資料夾,開啟後可以檢視對應的Gradle
版本。
去Gradle官網下載對應版本Gradle並安裝即可。
地址:https://gradle.org/releases/ 下載binary-only即可。
安裝好後記得配置Gradle
的環境變數
-
新增
GRADLE_HOME
環境變數,指向Gradle解壓目錄 -
配置Path環境變數:新增
%GRADLE_HOME%\bin
之後測試是否安裝成,在命令列中輸入以下命令:gradle -v
4.為安裝好的Gradle配置國內映象
進入Gradle
安裝目錄,在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構建
1.將程式碼匯入到IDEA中
點選Finish
後等待IDEA構建完專案,如果你之前已經按照我的方法配置了Gradle
的國內映象,這個過程不會太久,我們本機只用了10多分鐘就構建完成了
構建完成後整個專案結構如下:
2.構建整個專案
選擇Build > Build Project
四、新增測試模組
1.建立Module
2.選擇Gradle以及java
建立完成後,新增一些必要依賴:
修改建立好的模組中的build.gradle
檔案,新增如下三個依賴
compile(project(":spring-aop"))
compile(project(":spring-context"))
optional("org.aspectj:aspectjweaver")
3.建立測試類
建立配置類
建立任意Service
建立測試類
執行測試類,出現如下輸出則證明編譯成功!
五、過程問題整理
1.AnnotationCacheAspect找不到符號
這是因為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,如下圖:
之後一直下一步即可。
IDEA中配置aspectj
確保以下兩個外掛已經被啟用
-
Spring AOP/@AspectJ
-
AspectJ Support
將編譯器改為 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
完成新增。
2.Can’t find resource for bundle java.util.PropertyResourceBundle, key kotlin.gradle.testing.enabled
這個錯是idea自身的問題,沒有找到kotlin.gradle.testing.enabled
這個配置。
配置檔案位於/idea/lib/util.jar/misc/registry.propertise
。
在配置檔案中新增kotlin.gradle.testing.enabled=false後,重啟idea即可。
3.找不到 CoroutinesUtils類
右鍵spring-core/kotlin-coroutines/src/main/kotlin/org/springframework/core/CoroutinesUtils.kt檔案,選擇Build Modlekotlin-coroutines-main即可。
本文參考:https://blog.csdn.net/hollis_chuang/article/details/107373611