一 Spiring源碼搭建
1.1 gradle安裝
-
官網下載:https://gradle.org/install/; 加速版:https://services.gradle.org/distributions/
-
添加
GRADLE_HOME
環境變量,指向Gradle解壓目錄; -
配置Path環境變量:
%GRADLE_HOME%\bin
; -
打開命令行 輸入命令:
gradle -v
,顯示版本號等信息說明配置成功;
先不要下載安裝,看后面,耐心看完本節所有內容再想要不要全局安裝;
1.2 下載源碼
github: https://github.com/spring-projects/spring-framework
知識追尋者下載的是spring源碼5.0版本, gradle 6.5.1, jdk1.8;
由於github下載網速很慢,可以登陸碼雲進行folk一份github的spring源碼到自己倉庫下載會很快,如果你比較懶,知識追尋者也找到一個倉庫如下;
https://gitee.com/mirrors/Spring-Framework
1.3導入 IDEA
- 打開 IDEA
- 選擇Improt Project,指向spring源碼目錄;
- Improt Project from Existing Sources ;
- 選擇 build.gradle;
- 配置gradle構建(如果不想全局配置這步省略,打開工程后會自動下載gradle)
注意:idea 需要配置 gradle 關閉 offline 模式 ;由於2019版本在setting中無法找到 而是在右側的視圖中;
1.4 源碼編譯
有的小伙伴會下錯gradle版本,那真是卡幾天都無法解決的是,源碼編譯無法通過,直接放棄啊,知識追尋者也卡了一會,看官方說明才知道咋回事;
方式一:
在源碼項目的當前目錄命令行輸入如下命令會自動下載gradle, 直接將鏈接復制出來使用迅雷下載,然后配置gradle,在 右側gradle視圖中找到spring-oxm項目的compileTestJava雙擊即可;
gradlew :spring-oxm:compileTestJava
方式二:
也可以不配置本地全局gradle,你網絡好就直接在命令行中使用如上命令,idea會自動進行局部配置;
耐心等待一段時間進行源碼編譯;然后再用idea打開工程,構建成功如下
1.5替換倉庫
工程目錄下找到 build.gradle
;在如下代碼中添加一行 阿里倉庫,提升下載依賴速度;
repositories {
mavenCentral()
maven { url "https://repo.spring.io/libs-spring-framework-build" }
maven { url "https://repo.spring.io/snapshot" } // Reactor and RSocket
}
阿里雲倉庫
maven { url "http://maven.aliyun.com/nexus/content/groups/public/"}
1.6 去除 spring-aspect 加載
如果加載到后面發現 spring-aspect 模塊依賴報錯,
第一種方案 直接點擊該工程 右鍵 -> unload module,或者使用 exclude module 排除模塊;
第二種方案:安裝 aspect需要手動安裝
https://www.eclipse.org/aspectj/downloads.php
關於 安裝請看下面鏈接,因為知識追尋者這邊沒報錯;
https://blog.csdn.net/a704397849/article/details/102754505
1.7 創建gradle測試工程
File–>New–>Modul–>Gradle–>Java–>Next
打開測試工程的build.gradle文件添加 依賴 beas 和 context;
dependencies {
compile(project(":spring-beans"))
compile(project(":spring-context"))
testCompile group: 'junit', name: 'junit', version: '4.12'
}
新建用戶實體
public class SysUser {
private String username;
private String password;
public SysUser() {
}
public SysUser(String username, String password) {
this.username = username;
this.password = password;
}
// 省略set/get toString
}
新建配置類
/**
* @Author lsc
* <p> </p>
*/
@Configuration
public class SysConfig {
@Bean
public SysUser sysUser(){
return new SysUser("zszxz","123");
}
}
新建主類測試
/**
* @Author lsc
* <p> </p>
*/
public class ZszxzMain {
public static void main(String[] args) {
// 獲取容器
ApplicationContext ac =new AnnotationConfigApplicationContext(SysConfig.class);
// 獲取 bean
SysUser user = (SysUser) ac.getBean("sysUser");
System.out.println(user.toString());
}
}
build 一下 測試工程,然后執行主類,一般情況下會報錯看后續內容
1.8 去除風格校驗
如果報代碼格式錯誤,找到 src 下checkstyle里面checkstyle.xml文件 ,去除掉 里面的風格校驗;
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN" "https://checkstyle.org/dtds/configuration_1_3.dtd">
<module name="com.puppycrawl.tools.checkstyle.Checker">
</module>
1.9 kotlin報錯
如果 kotlin 1.3 版本太低,無法支持新的語法,找到 idea 的kotlin 語言配置,升級到 1.4;知識追尋者編譯第一次編譯出現這種問題,第二次沒有;很魔幻的事情,建議大家不要使用idea 2019.2 版本,坑比較大;
重點: 網速很重要,如果連wifi不建議進行編譯,知識追尋者親測用wifi發了2天沒搞定!!!后來換了寬帶非常快;
1.20 核心包編譯出錯
如果spring-core 核心包下 jrf 包(org.springframework.core.metrics.jfr)里面的類出錯一種辦法直接注釋掉出錯類,
第二種:可能是jdk不兼容,更換jdk;
1.20 編譯成功
如果最后沒報錯,並且主類執行成功輸出如下;
> Task :zszxz-test:ZszxzTest.main()
SysUser{username='zszxz', password='123'}