編譯Spring 5.2版本源碼

環(huán)境準(zhǔn)備

  • idea
  • jdk 1.8+
  • gradle-5.6.4
  • kotlin
  • git

實際上kotlin可以直接在idea上下最新顶捷。gradle在spring-framework框架中有指定固定版本搅窿。不需要獨立下載

獲取源碼

可以通過spring-framework官網(wǎng)找到托管代碼鏈接跳轉(zhuǎn)到GitHub郁竟,也可以直接在github上搜索找到對應(yīng)的源碼,通過git的命令clone到本地光戈。

git clone git@github.com:spring-projects/spring-framework.git
cd spring-framework

并建議checkout 5.2.x的分支來構(gòu)建,在master上構(gòu)建比較復(fù)雜(并沒有在master上編譯過)。如果非要在master分支上構(gòu)建也是可以暇仲,不過坑比較多,只能一個個去解決副渴。

git chekcout -b 5.2.x origin/5.2.x

修改倉庫信息

修改其下幾個操作并不是必須奈附。因為在構(gòu)建項目時,因為網(wǎng)絡(luò)問題或者版本問題導(dǎo)致不成功煮剧,修改倉庫信息可以更順暢完成整個編譯過程斥滤。

  • 修改gredle-wrapper.properties
    spring-framework/gradle/wrapper/gradler-wrapper.properties文件內(nèi)容變更,變更目的是在網(wǎng)絡(luò)不穩(wěn)定情況下原地址下載gradler失敗勉盅。如果你本地已經(jīng)有對應(yīng)版本gradler可以直接替換為本地地址佑颇。
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
#替換如下地址為本地
#distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip
distributionUrl=file\://C:\User\gradle-5.6.4-bin.zip#指定自己本地gradler的5.6.4版本地址
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
  • 修改grdle的倉庫
    spring-framework/build.gradle設(shè)置倉庫地址,添加阿里云倉庫地址'http://maven.aliyun.com/nexus/content/groups/public/'草娜。不添加也可以拉取庫的內(nèi)容挑胸,但是網(wǎng)絡(luò)以及響應(yīng)時間太長。所以能省時間為啥不添加呢宰闰?
    repositories {
            //添加如下一行即可茬贵,添加aliyun的倉庫地址
            maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
            mavenCentral()
            maven { url "https://repo.spring.io/libs-spring-framework-build" }
        }

對spring-oxm預(yù)編譯

根據(jù)官方提示要求先對spring-oxm模塊先預(yù)編譯處理,具體操作如見

  • 進(jìn)入spring-framework目錄下
  • 執(zhí)行如下gradle命令
    ./gradlew :spring-oxm:compileTestJava
    

等待進(jìn)度條到100%即可移袍,執(zhí)行過程后面會有測試案例會報錯誤可以不用管解藻。


gradlew :spring-oxm:compileTestJava

導(dǎo)入idea

導(dǎo)入Idea中(File-->New-->project from Existing Source-->spring-framework本地文件路徑--> Select build.gradle),導(dǎo)入idea中需要一段較長時間所以耐心等待。

修改idea中jdk版本和kotlin版本

打開Settings咐容,win版本可以通過快捷鍵ctrl+alt+s舆逃;Settings-->Build,Execution,Deployment-->Compiler.

  • 修改jdk編譯版本


    compile-version.png
  • 修改Kotlin版本


    kotlin-version.png

打開project Structure,win版本可以通過快捷鍵ctrl+alt+shift+s;

compiler-jdk-version.png

編譯項目

準(zhǔn)備就緒,那么就可以編譯項目戳粒。

  • 定位到spring-framework目錄下

  • Build-->Build project來編譯項目

    build-project
  • 編譯過程漫長路狮,需要耐心等待。編譯成功如下顯示:

    build-success.png

測試

1蔚约、新增一個module來用測試準(zhǔn)備奄妨,后續(xù)在模塊下測試并跟蹤源碼。新增Module(spring-framework-->'右鍵'-->New-->Module),新的Module選擇gradle項目構(gòu)建苹祟。

new-module.png

2砸抛、新增完之后需要等待gradle的構(gòu)建评雌。構(gòu)建完成如下如:

build-module

3、在新模塊中build.gradle引進(jìn)spring的模塊

plugins {
    id 'java'
}

group 'org.springframework'
version '5.2.14.BUILD-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    //添加spring-context的模塊
    compile(project(":spring-context"))
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

4直焙、一切準(zhǔn)備就緒景东,那么整個小demo讓他跑起來。

demo

ScanConfig:指定掃描包奔誓,讓spring加載bean信息

@ComponentScan("com.cooooople.juns.service")
public class ScanConfig {

}

IndexService:被spring掃描到并加載到容器中

@Component
public class IndexService {

    public IndexService() {
        System.out.println("hello IndexService!");
    }

    public void index(){
        System.out.println("invoked index method!");
    }
}

CooooopleApplication:啟動類

public class CooooopleApplication {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ScanConfig.class);
    //獲取IndexService
        IndexService bean = context.getBean(IndexService.class);
    //執(zhí)行index方法
        bean.index();
    }
}

運行結(jié)果

經(jīng)過一系列瞎搗鼓斤吐,直等到預(yù)期結(jié)果:

demo-result

spring-framework 5.2.x源碼編譯就完。后續(xù)接受spring源碼的摧殘吧厨喂!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末和措,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蜕煌,更是在濱河造成了極大的恐慌派阱,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斜纪,死亡現(xiàn)場離奇詭異贫母,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)傀广,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門颁独,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人伪冰,你說我怎么就攤上這事誓酒。” “怎么了贮聂?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵靠柑,是天一觀的道長。 經(jīng)常有香客問我吓懈,道長歼冰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任耻警,我火速辦了婚禮隔嫡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘甘穿。我一直安慰自己腮恩,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布温兼。 她就那樣靜靜地躺著秸滴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪募判。 梳的紋絲不亂的頭發(fā)上荡含,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天咒唆,我揣著相機(jī)與錄音,去河邊找鬼释液。 笑死全释,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的均澳。 我是一名探鬼主播恨溜,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼找前!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起判族,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤躺盛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后形帮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體槽惫,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年辩撑,在試婚紗的時候發(fā)現(xiàn)自己被綠了界斜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡合冀,死狀恐怖各薇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情君躺,我是刑警寧澤峭判,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站棕叫,受9級特大地震影響林螃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜俺泣,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一疗认、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伏钠,春花似錦横漏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至打掘,卻和暖如春华畏,著一層夾襖步出監(jiān)牢的瞬間鹏秋,已是汗流浹背亡笑。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工侣夷, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人仑乌。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓百拓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親晰甚。 傳聞我的和親對象是個殘疾皇子衙传,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容