筆者的環(huán)境與版本
JDK:1.8.0_271(很重要)
Spring:5.2.4.RELEASE
下載Spring源碼,可以從Spring官方的github庫中(https://github.com/spring-projects/spring-framework)進(jìn)行下載。由于需要從國外下載,速度肯定會(huì)慢,哈哈哈。不過我們可以登錄gitee,將項(xiàng)目導(dǎo)入到gitee中,下載速度就會(huì)快很多啦。

將Spring的github倉庫地址輸入在文本框里

導(dǎo)入完成之后,點(diǎn)擊master,可以看到里面包含很多Spring的歷史分支版本

切換到標(biāo)簽欄,可以看到各種小版本

查看Spring的版本,找到gradle.properties文件


查看Grandl版本,找到spring-framework/ gradle / wrapper/gradle-wrapper.properties

配置鏡像
將源碼下載到本地之后,別急著用idea打開,先配置阿里云鏡像。

打開build.gradle文件,找到repositories標(biāo)簽

在里面加入
maven() { url "http://maven.aliyun.com/nexus/content/groups/public/" }
然后使用idea導(dǎo)入spring-framework項(xiàng)目,idea會(huì)自動(dòng)去下載gradle依賴。接下來的事情就交給網(wǎng)速。
坑
1、JDK版本問題
之前筆者的JDK版本是1.8.0_221,然后重新安裝JDK,修改版本為1.8.0_271

2、鏡像問題
出現(xiàn):Could not resolve: com.ibm.websphere:uow:6.0.2.17,那是因?yàn)槲覍pring自帶的鏡像給注釋掉了。

3、jar下載不下來問題

這個(gè)問題挺好解決的,直接Ctrl + c jar包的地址,在瀏覽器進(jìn)行下載。
下載完成后,需要找到gradle默認(rèn)的保存的repository路徑,F(xiàn)ile->Settings->Build,Execution,Deployment->Build Tools ->Gradle。
默認(rèn)是在
C:\Users\Administrator\.gradle
然后進(jìn)入.gradle目錄下的caches\modules\files-2.1目錄中,將下載的jar包拷貝到這里面。
舉例:缺少org.python:jython-standalone:2.7.1

那就需要在files-2.1下建立對(duì)應(yīng)的目錄。一個(gè)冒號(hào)就是分隔符。



筆者將上面遇到的問題都解決之后,Spring就編譯成功啦?。?!

添加模塊
接下來筆者帶大家在spring-framework來創(chuàng)建一個(gè)自己的module,看是否能夠使用這些源碼

選擇Gradle創(chuàng)建一個(gè)Java項(xiàng)目

給module取一個(gè)名字

在新創(chuàng)建的 module 的 build.gradle 文件中,我們添加 spring-context 依賴,這個(gè)相當(dāng)于 Maven 中的 pom.xml:
dependencies {
compile(project(":spring-context"))
}
添加完依賴之后,我們寫一個(gè)簡(jiǎn)單的測(cè)試類來試試。
首先創(chuàng)建一個(gè)User類:
public class User {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
然后在resources目錄下創(chuàng)建 beans.xml 文件,配置該 Bean:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="com.gongj.User" id="user">
<property name="id" value="1"/>
<property name="name" value="ssss"/>
</bean>
</beans>
最后編寫main方法:
public class Main {
public static void main(String[] args) {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:beans.xml");
User user = ctx.getBean(User.class);
System.out.println("user = " + user);
}
}
啟動(dòng)的過程中又遇到了三個(gè)問題(我**太難了┭┮﹏┭┮)
錯(cuò)誤一:

運(yùn)行一下spring-core中的build的task,會(huì)就產(chǎn)生所缺少的jar包

錯(cuò)誤二:

步驟1:

步驟2:
需要選擇spring-core的main包

步驟3:添加jar


根據(jù)版本不同,該jar的所在目錄也有可能不同。有可能在spring-core-coroutines包下。該包與spring-core同級(jí)。
步驟4:然后重新編譯項(xiàng)目。

錯(cuò)誤三:

打開spring-context.gradle文件,把這個(gè)optional改成了compile

然后再次運(yùn)行main方法:
user = User{id=1, name='ssss'}