1. 程式人生 > 實用技巧 >Spring原始碼編譯過程

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

確保以下兩個外掛已經被啟用

  1. Spring AOP/@AspectJ

  2. AspectJ Support

將編譯器改為 Ajc,接著設定Ajc的安裝目錄,選擇到aspectjtools.jar,同時,一定要將Delegate to Javac選項打鉤,這個代理設定的作用只對指定的專案進行Ajc編譯,其他的專案還是用預設的javac編譯器編譯。如果不勾選這個代理選項,則全部專案都使用Ajc編譯器編譯,可能會導致編譯錯誤。

  • 指定需要使用Ajc編譯的專案

分別為spring-aopspring-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