Spring 5.2.x 源碼環境搭建(Windows 系統環境下)


本文參考自博客 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

2、Jdk 版本至少為 1.8

3、安裝好 IntelliJ IDEA (其他開發工具,如 eclipse、Spring Tool Suite 等也是可以的),因為使用 IDEA 可以直接比較版本間的差異,如圖所示:

源碼構建

1、獲取 Spring 源碼
在需要使用 git clone 命令的方式將源碼拉取到本地,命令如下:

git clone https://github.com/spring-projects/spring-framework.git

然后切換到 5.2.x 分支,命令如下:

git checkout origin/5.2.x

這個過程可能會耗費比較長的時間,此外還可以直接下載源碼壓縮包,如圖所示:

2、添加阿里雲鏡像
在編譯過程中,Spring 會自動下載依賴包,默認使用的是官方鏡像,下載比較慢,所以我們提前添加好國內鏡像,將下面這行代碼粘貼到 build.gradle 文件中的 repositories 節點下即可:

//添加阿里雲鏡像
maven { url "http://maven.aliyun.com/nexus/content/groups/public" }

如下圖所示:

3、預先編譯 spring-oxm 模塊
打開命令行窗口,並切換到源碼所在文件夾,執行以下命令:

gradlew :spring-oxm:compileTestJava

出現 BUILD SUCCESS 字樣時說明構建成功。

4、根據編譯后的源碼下載並安裝對應的版本的 Gradle
在完成 spring-oxm 模塊的編譯后,會在當前目錄生成一個 .gradle 的文件夾:

打開后可以查看對應的 Gradle 版本:

可以直接在 https://gradle.org/releases/ 網站上下載對應的版本,注意要選擇 binary-only 的。

安裝好后記得配置 Gradle 的環境變量:
新增 GRADLE_HOME 環境變量,指向 Gradle 解壓目錄
配置 Path 環境變量:追加 %GRADLE_HOME%\bin

之后測試是否安裝成,在命令行中輸入:gradle -v 即可查看版本。

5、給 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
        }
    }
}

操作步驟如下圖所示:

6、將代碼導入到 IDEA 中
6.1、打開 IDEA 並選擇導入項目

6.2、選擇導入一個 Gradle 項目

6.3、配置導入的項目

點擊 Finish 后等待 IDEA 構建完項目,如果配置了 Gradle 的國內鏡像,這個過程應該不會太久。構建完成后整個項目結構如下:

如果你跟我一樣是直接檢出的代碼,記得將分支切換到 5.2.x,如圖所示:

7、構建整個項目
選擇 Build > Build Project

可能出現的問題

1、AnnotationCacheAspect找不到符號
在這個過程中你可能會碰到如下錯誤:

這是因為AnnotationCacheAspect.aj 不是java文件需要另外的aspectj進行處理,可以按照以下步驟解決這個問題

打開命令行,cd到AspectJ的jar包所在的文件夾,運行java -jar aspectj-1.9.4.jar命令,打開AspectJ的安裝界面,直接點擊Next,如下圖:

接着選擇 jdk 的安裝路徑,繼續 Next:

接着選擇 AspectJ 的安裝路徑,然后 Install 安裝:

2、IDEA 中配置 aspectj
確保以下兩個插件已經被激活

  • Spring AOP/@AspectJ
  • AspectJ Support

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

3、指定需要使用 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,成功完成編譯

添加測試模塊

1、右鍵工程名 —> new —> module

2、選擇 Gradle 及 Java

3、輸入模塊名稱

點擊 next —> Finish 完成測試模塊的創建
最后,添加一些必要的依賴,修改創建好的模塊中的 build.gradle 文件,添加如下三個依賴:

compile(project(":spring-aop"))
compile(project(":spring-context"))
optional("org.aspectj:aspectjweaver")

如下圖所示:

至此就完成了整個 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=klCLGZHEFBWZf22NYbYJM5EP5u96wC4NwlHYdGKbqnnHfpvPcIMolOiwPPQLROEe


免責聲明!

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



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