環(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í)行過程后面會有測試案例會報錯誤可以不用管解藻。
導(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編譯版本
-
修改Kotlin版本
打開project Structure
,win版本可以通過快捷鍵ctrl+alt+shift+s
;
編譯項目
準(zhǔn)備就緒,那么就可以編譯項目戳粒。
定位到spring-framework目錄下
-
在
Build
-->Build project
來編譯項目 -
編譯過程漫長路狮,需要耐心等待。編譯成功如下顯示:
測試
1蔚约、新增一個module來用測試準(zhǔn)備奄妨,后續(xù)在模塊下測試并跟蹤源碼。新增Module(spring-framework
-->'右鍵'-->New
-->Module
),新的Module選擇gradle項目構(gòu)建苹祟。
2砸抛、新增完之后需要等待gradle的構(gòu)建评雌。構(gòu)建完成如下如:
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讓他跑起來。
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é)果:
spring-framework 5.2.x源碼編譯就完。后續(xù)接受spring源碼的摧殘吧厨喂!