參考博客
Spring 5.2.x 源碼環境搭建(Windows 系統環境下)
使用Git,從碼雲上clone項目到本地,修改完之后提交項目到碼雲
git 如何創建一個分支
編譯Spring5.0.x源碼之一路坎坷,你經歷過絕望嗎?
1. 下載源碼
碼雲鏡像倉庫:點此
選擇5.3.x的分支,下載zip壓縮文件,解壓,.github文件夾直接刪了
2. 配置文件修改
build.gradle約292行改為(allowInsecureProtocol = true這個配置,配置init.gradle時最好也加上)
repositories {
// 本地倉庫路徑,應該是不用配置,根據環境變量處理的
maven { url 'file:///E:/java/development/gradle/gradle_repository'}
mavenLocal()
// 私服
maven { url "http://192.168.31.100:8081/repository/maven-public/"
// gradle7以后,使用http協議的會報錯,需要允許不安全協議
allowInsecureProtocol = true }
// 阿里雲公共倉庫
maven { url "https://maven.aliyun.com/repository/public"
allowInsecureProtocol = true }
maven { url "https://repo.spring.io/libs-spring-framework-build"
allowInsecureProtocol = true }
mavenCentral()
}
【gradle\wrapper\gradle-wrapper.properties】文件打開
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
這個路徑是gradlew會下載配置的gradle(可搜索gradle和gradlew區別),復制路徑到瀏覽器直接下載,將壓縮包放到自定義路徑,然后配置gradle\wrapper\gradle-wrapper.properties文件
# 下面組合為下載后解壓位置 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists # 下載地址,現配置為文件位置 distributionUrl=file\:///E:/java/development/gradle/gradle-7.2-bin.zip # 下面組合為下載后存放位置 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists
實際使用idea直接導入不一定會使用gradlw命令,也即上面的配置不一定有用,那么則需要自己配置gradle(搜索gradle的安裝和配置),高版本的IDEA不支持gradle的全局配置了,只能單獨對項目進行配置
還有.gitignore文件,默認配置的文件中忽略所有target文件夾,但是aop源碼里有一個包就是名為target,需要在這里修改和IDEA配置不忽略,否則可能編譯報錯/提交碼雲時沒有提交上去
target/
# 上面忽略所有target目錄,下面則指定某個target目錄不可忽略
!/spring-aop/src/main/java/org/springframework/aop/target/
注意:當直接復制上述配置時,注意將空白字符處理一下,避免復制出無法識別的空白字符從而報錯
3. 碼雲上傳(可略)
首先碼雲創建倉庫,創建后也有指示如何配置(git的安裝和配置自行搜索)
# 切換到解壓后項目根目錄 cd /E/java/OpenSource/Spring/Spring-Framework-5.3.x # 初始化 git init # 查詢文件狀態 git status -s # 全部提交到暫存區(所需時間較長) git add . # 提交到本地倉庫 git commit -m '初始化' # 與遠程倉庫相關聯, origin是遠程分支名稱, 取決於倉庫配置, 碼雲倉庫創建完畢時有指示 git remote add origin https://gitee.com/cxy-ali-gitee/spring-5.3.x.git # 提交到遠程倉庫(-u指定默認遠程倉庫, 后續可不指定遠程倉庫, 且會創建遠程master分支) # 需要賬號密碼 git push -u origin master # 新建本地分支 git branch dev # 會在遠程倉庫建立dev分支 git push origin dev # 切換到dev分支 git checkout dev
3. 源碼編譯
IDEA:file -> project -> new project from existing source -> import project from extenal model(gradle)
導入后右下角和立即停止gradle的build,然后配置此項目的gradle
然后apply,可以看一下上面配置的zipStorePath路徑是否產生,產生則先關閉IDEA,刪除,然后重新打開IDEA
導入后在右邊Gradle導航欄 spring-core --> Tasks --> other --> compileTestJava雙擊執行
OK,沒問題
但是下面編譯時會出錯,在於org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator引入import org.springframework.aop.target.SingletonTargetSource失敗看看;;
4. 測試
新建一個 gradle的模塊,父module為spring,build.gradle內配置
1 dependencies { 3 api(project(":spring-context")) 4 }
主要是第二行引入模塊
然后就可以編寫案例測試了,只要新建一個Configuration類掃描 + 一個Bean ==> getBean 能拿出來即可
如
package com.chen.app; import com.chen.app.domain.UserService; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan("com.chen.app") public class Application { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Application.class); UserService bean = context.getBean(UserService.class); System.out.println("----------------------------------------------"); System.out.println(bean); System.out.println("----------------------------------------------"); } }
package com.chen.app.domain; import org.springframework.stereotype.Component; @Component public class UserService { }