IDEA編譯Spring源碼

筆者的環(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ì)快很多啦。

image.png

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


image.png

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


image.png

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

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


image.png

image.png

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

配置鏡像

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


image.png

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


image.png

在里面加入
 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


image.png

2、鏡像問題

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


image.png

3、jar下載不下來問題

image.png

這個(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
image.png

然后進(jìn)入.gradle目錄下的caches\modules\files-2.1目錄中,將下載的jar包拷貝到這里面。
舉例:缺少org.python:jython-standalone:2.7.1
image.png

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

image.png

image.png

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


image.png

添加模塊

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


image.png

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


image.png

給module取一個(gè)名字
image.png

在新創(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ò)誤一:

image.png

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


image.png

錯(cuò)誤二:

image.png

步驟1:

image.png

步驟2:

需要選擇spring-core的main包


image.png

步驟3:添加jar

image.png

image.png

根據(jù)版本不同,該jar的所在目錄也有可能不同。有可能在spring-core-coroutines包下。該包與spring-core同級(jí)。

步驟4:然后重新編譯項(xiàng)目。

image.png

錯(cuò)誤三:

image.png

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


image.png

然后再次運(yùn)行main方法:

user = User{id=1, name='ssss'}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容