Spring 5.3.x源碼構建


參考博客

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 {

}

 

 

 


免責聲明!

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



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