一、工具
- gradle 5.6.4 (百度gradle下載即可,添加gradle的bin目錄到Path環境變量中,命令行gradle -v檢查)
- spring-framework 源碼文件 (github搜索spring-framework下載最新的即可)
- IDEA
二、導入源碼
1、首先進入源碼根目錄查看 import-into-idea.md 文件
2、在源碼根目錄命令行執行import-into-idea.md 中的1步驟 ./gradlew :spring-oxm:compileTestJava
能編譯成功即可,可能會出現和git相關異常,但似乎不影響後面的編譯和使用。
3、在源代碼根目錄的build.gradle 中先添加 aliyun 的倉庫地址
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
4、在IDEA中執行import-into-idea.md 中的2步驟,選擇自己的gradle目錄。然後等待編譯。
5、編譯一般都是可以通過的。
6、添加自己的gradle java module到工程中。
7、把新module中的build.gradle文件名改爲 自己的module名.gradle ,然後在 dependencies 中添加
compile(project(":spring-beans")) compile(project(":spring-context")) compile(project(":spring-core")) compile(project(":spring-expression"))
8、刪除新module的settings.gradle,在源碼工程下的settings.gradle中添加
include "你的新module名"
三、在新module中添加測試代碼
1、把新module下src目錄下的main目錄 右鍵Mark directory as sources root
新建包和測試類
Person.java
package bean;
public class Person {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
BeanTest.java (module設置好是可以引用到相關的類的)
package bean;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class BeanTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext acac = new AnnotationConfigApplicationContext();
acac.register(Person.class);
acac.refresh();
Person person = acac.getBean("person", Person.class);
person.setName("hhhh");
System.out.println(person.getName());
}
}
2、運行BeanTest.java 類
a、首先可能報錯找不到CoroutinesUtils類
不知道是不是工程構建方式有問題,這個類是spring-core 下的kotlin-coroutines編譯後的包裏的,應該引用好的呀。既然找不到,我是直接把包拿出來,然後讓spring-core這個module單獨添加這個jar包引用,然後再運行。如果沒有這個包,編譯一下工程就有了。(Project Structure頂上的mySpring可以刪除掉了,因爲已經加到spring工程中去了)
b、再運行,繼續報錯
這個是spring-instrument編譯後的jar中的類,也應該引用好了的呀。。再手動添加對應jar到spring-context的main下。
c、再運行,ok。
d、之前在運行的時候還出現過缺少過卻commons-logging包的,也是去網上下載的jar加入到報錯的對應module下的。
四、說明
1、對gradle不熟,原本想源碼能夠編譯成功應該就能用了,結果在新建的module中死活找不到spring其他module裏的類,不是很懂。然後就把新建的工程加到了spring的setting.gradle中再引入對應的module就可以了。
2、能夠引入其他module中的類應該就可以正常測試了呀,結果運行各種找不到類。正常情況應該不是這樣,都已經使用了gradle應該不會出現依賴問題呀,可能工程配置真的有問題。