日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

最近呀,有小伙伴提出 自己在學(xué)習(xí) Spring 的時(shí)候,這個(gè)源碼環(huán)境有些搞不定。 那這怎么能行,不能因?yàn)檫@點(diǎn)小困難就讓小伙伴放棄呀。

這里咱就不在贅述讀Spring源碼的好處了吧,想干這行的應(yīng)該都懂。

今天就是要帶那些想要學(xué)習(xí) Spring 源碼的小伙伴,手把手帶大家把這個(gè)源碼編譯好,這活盡量呀,給大家得整的漂亮點(diǎn)。

這里說明下,這個(gè)操作過程不需要科學(xué)上網(wǎng),但是,注意了,這里有個(gè)但是,你總得保證你的電腦能上網(wǎng)吧。

考慮到有的小伙伴可能因?yàn)榫W(wǎng)絡(luò)原因可能訪問不了 github 或者下載非常慢,那這種情況的小伙伴也可以選擇看我那期一招搞定 github 訪問慢的文章。

當(dāng)然不搞也沒關(guān)系,文章中涉及的源碼和工具包指北君也都會(huì)打包下載好最后給到大家,那來吧,直接開搞。

下載Spring源碼

這里有的小伙伴可能不知道源碼在哪下載,沒關(guān)系!這里的思路一般是我們要搞某個(gè)技術(shù),第一反應(yīng)就是先上它的官網(wǎng)。直接在搜索欄輸入 Spring,就能看到它的官網(wǎng)了。

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

打開 Spring 的官網(wǎng):https://spring.io/

Spring 全家桶包含的項(xiàng)目有很多,我們選擇我們今天要搞得 Spring 框架:

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

這里你就可以看到最新的正式發(fā)布版本已經(jīng)是 5.3.8 的,真的是更新的好快,反正咱們是學(xué)習(xí)(實(shí)際項(xiàng)目千萬別用最新版本),這里我就帶大家來編譯最新的版本,這樣大家也可以學(xué)習(xí)到最新的功能特性。

當(dāng)然了這個(gè)版本不重要,你也可以選擇其他版本,咱今天是授人以漁,不是授人以魚,重要的是學(xué)習(xí)這個(gè)方法,你看完后想編譯啥版本就編譯啥版本。

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

我們點(diǎn)擊右上角的 github 圖標(biāo)就會(huì)跳轉(zhuǎn)到 github 上面的源碼項(xiàng)目了。

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

下載方式可以直接通過 git clone 或者 下載 zip 包自己解壓下,我這里是直接下載 zip 包了。

下載地址:
https://github.com/spring-projects/spring-framework/releases

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

閱讀Spring的官方編譯文檔

其實(shí)呀,很多搞不定 Spring 源碼編譯的小伙伴,肯定很多都是去網(wǎng)上隨便找個(gè)教程,結(jié)果各種踩坑,因?yàn)樗训降馁Y料參差不齊,這點(diǎn)估計(jì)大家都深有體會(huì)了。

所以我們就要養(yǎng)成一個(gè)習(xí)慣,必須要看官方文檔。這里也不是要求大家其它資料不看,畢竟也有很多優(yōu)秀的博客,大家都是成年人,肯定是全都要嘍。

官方文檔一般都是英文,但是別害怕,我這個(gè)大學(xué)四級都考了三回的英語渣,都能勉強(qiáng)看,大家肯定都沒問題了,況且咱可以借助翻譯插件嘛。

如何編譯 Spring 源碼其實(shí) Spring 官方提供了詳細(xì)的文檔,有離線版也有在線版,也就是開源項(xiàng)目都有的 REDAME 文件。

我這里選擇離線版來演示吧。我們解壓進(jìn)入到下載好的 Spring 框架源碼項(xiàng)目下,查看 REDAME 。

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

就會(huì)發(fā)現(xiàn)有一個(gè) build from source 的章節(jié)。

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

點(diǎn)擊這個(gè)鏈接,就會(huì)看到詳細(xì)的編譯構(gòu)建 Spring 框架源碼的文檔了:
https://github.com/spring-projects/spring-framework/wiki/Build-from-Source

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

接下來,咱們就按照文檔來編譯 Spring-Framework5.3.8 版本的源碼。 根據(jù)文檔的說明,首先我們要有一個(gè) JDk8 或者更高的版本環(huán)境,我電腦安裝的是 JDk11 所以沒啥問題。 然后要安裝 Git,用來拉取源代碼的,因?yàn)槲覀円呀?jīng)下載了源代碼,就不管它了。

修改配置

先別著急,在編譯構(gòu)建之前,教大家一絕招。這也是我在編譯過程中實(shí)踐出來滴心得。

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

從本地下載gradle

因?yàn)榈谝淮芜\(yùn)行就會(huì)去下載 gradle 到本地,然后通過 gradle 來編譯 Spring 源碼。 這個(gè)就很慢了,外網(wǎng)服務(wù)器下載,你懂得,有被墻的風(fēng)險(xiǎn),并且本身也賊慢。

那為什么開始編譯構(gòu)建就會(huì)自動(dòng)下載 gradle 呢?從哪里下載?下載的版本是多少?

我們打開 Spring 源碼的根目錄:

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

配置文件的地址就是源碼根目錄的二級目錄下的 gradle-wrApper.properties 文件。

打開文件包含下列內(nèi)容:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-6.8.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
  • distributionUrl:表示的就是 gradle 的下載地址,默認(rèn)配置的是一個(gè)遠(yuǎn)程 URL。
  • distributionBase:下載后存放的目錄,默認(rèn)就是用戶目錄下的 .gradle 目錄;
  • zipStoreBase:解壓后存放的目錄

我在構(gòu)建的過程中發(fā)現(xiàn)配置的下載地址下載非常慢,經(jīng)常超時(shí),甚至有時(shí)候被墻。

所以我們倒不如先下載到本地,然后修改配置文件從本地獲取 gradle,這樣一來編譯構(gòu)建就會(huì)快很多了。

我們只需要修改 gradle 的下載地址就好了,其他的配置項(xiàng)建議保持不變。

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

上述配置的意思就是如果我們運(yùn)行 gradlew 會(huì)自動(dòng)去 file
:///Users/sevenluo/IdeaProjects/spring-simple/gradle-6.8.3-bin.zip 這個(gè)目錄下載一個(gè) gradle 到當(dāng)前用戶的 .gradlewrapperdists目錄 ,然后解壓到當(dāng)前用戶的 .gradlewrapperdists 目錄。

但是實(shí)際目錄不是這個(gè),這個(gè)命令還會(huì)自己生成一些目錄。下圖是指北君電腦實(shí)際 gradle 的下載解壓目錄:

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

我本地使用的是 gradle-6.8.3-bin.zip ,如果你本地網(wǎng)絡(luò)沒問題可以自行去官網(wǎng)下載,當(dāng)然指北君也下載好了,最后也都會(huì)給大家。

修改遠(yuǎn)程倉庫

改完上面的配置也先別著急運(yùn)行編譯,現(xiàn)在解決了下載 gradle 慢的問題,但是編譯開始會(huì)使用 gradle 從遠(yuǎn)程倉庫下載大量相關(guān)依賴的包。

如果你采用默認(rèn)配置,那么我可以負(fù)責(zé)任的告訴你,你絕對得等呀等呀等,等的黃花菜都涼了。而且還有很大可能會(huì)失敗!原因也是因?yàn)槟J(rèn)倉庫是國外的服務(wù)器,速度真的是沒誰了,想屎,不煩躁都不行。

所以呀,這里我們要把遠(yuǎn)程倉庫改為咱們國內(nèi)的阿里云,這樣就舒服多了,怎么改?

很簡單,找到 Spring 源碼根目錄下的 build.gradle,打開編輯添加阿里云的倉庫。

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

maven { url 'https://maven.aliyun.com/repository/public' } // 阿里云
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } // 插件

那到這里,就可以運(yùn)行了?

no!no!no!,hold on, hold on

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

再打開 Spring 源碼根目錄下的 settings.gradle 文件,添加阿里云倉庫。

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

maven { url 'https://maven.aliyun.com/repository/public' } //阿里云
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } //插件

至此萬事具備只欠東風(fēng)了,就等我們開始編譯。

當(dāng)然上面這些配置優(yōu)化是指北君在實(shí)踐中自己總結(jié)出來的,如果你的網(wǎng)速夠快你完全可以不用優(yōu)化,直接運(yùn)行下面的命令。

開始編譯構(gòu)建

我們編譯構(gòu)建 Spring 源碼,一般都是要導(dǎo)入到 IDEA 里面進(jìn)行測試或者閱讀的。Spring 對于如何導(dǎo)入也提供了文檔,是不是很貼心。當(dāng)然也有導(dǎo)入 Eclipse 的文檔,大家可以根據(jù)自己的需求來操作。我這里是用 IDEA 的,你如果導(dǎo)入 Eclipse 操作也都是基本上一樣的。

導(dǎo)入 idea 的文檔地址:

https://github.com/spring-projects/spring-framework/blob/main/import-into-idea.md
手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

根據(jù)文檔的提示在導(dǎo)入 idea 之前需要去 Precompile spring-oxm ,也就是預(yù)編譯 spring-oxm 這個(gè)項(xiàng)目。運(yùn)行 ./gradlew
:spring-oxm:compileTestJAVA.

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

預(yù)編譯起來也很快,我電腦上一共耗時(shí) 23 毫秒。

然后我們還要預(yù)編譯下 spring-core 這個(gè)項(xiàng)目,因?yàn)楹竺嫖覀冞\(yùn)行測試模塊的時(shí)候需要用到里面的類。執(zhí)行:

./gradlew :spring-core:compileTestJava.
手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

導(dǎo)入IDEA

  1. 開始使用idea導(dǎo)入Spring源碼,F(xiàn)ile -> New -> Project from Existing Souces…

 

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

  1. 選擇 Spring 源碼項(xiàng)目的目錄,進(jìn)而選擇根目錄當(dāng)中的 build.gradle 文件導(dǎo)入;
手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

  1. 導(dǎo)入 idea 之后會(huì)開始自動(dòng)構(gòu)建、建立索引,這個(gè)過程也是很漫長,你只能等,我這邊用了不到7分鐘,看電腦性能;
手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

  1. 接下來我們對 idea 進(jìn)行一些設(shè)置,不然每次 idea 運(yùn)行都會(huì)通過 gradle 去編譯運(yùn)行。gradle 運(yùn)行編譯特別慢,需要改成idea自己編譯運(yùn)行.
手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

說明一下,這里不是一定要改,但是如果你不改用默認(rèn)的則會(huì)特別慢,改成idea快的不止一點(diǎn)點(diǎn)。

到這,我們的 spring 框架源碼就編譯完了,為了檢驗(yàn)我們的勞動(dòng)成果,下面建一個(gè) moudle 來測試一下。

驗(yàn)證測試

  1. 在我們的 spring 源碼項(xiàng)目下新建我們自己的測試module,如下圖所示;
手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 


手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

輸入測試的 moudle 名:

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

  1. 建好項(xiàng)目之后再 gradle 的配置文件中添加 spring 的依賴,相當(dāng)于你建了一個(gè)maven項(xiàng)目,在pom文件中添加spring的依賴;
implementation(project(":spring-context"))

修改后的配置:

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

  1. 寫測試代碼;
  • 配置類的代碼,用于指定掃描的bean;
package com.sevenluo.spring.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.sevenluo.spring")
public class AppConfig {
//掃描ccom.sevenluo.spring包下面的所有bean
}
  • 寫一個(gè)sevice,被掃描的bean;
package com.sevenluo.spring.services;

import org.springframework.stereotype.Service;

@Service
public class HelloService {
	public void hello() {
		System.out.println("Hello,sevenluo!");
	}
}
  • 測試類代碼;
手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

  1. 右鍵運(yùn)行——可能你會(huì)出現(xiàn)一些錯(cuò)誤;比如博主這里就出現(xiàn)了ava: 程序包jdk.jfr不存在 錯(cuò)誤;
手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

這個(gè)問題是因?yàn)?nbsp;jdk.jfr 是 java9 以后才有的模塊,而 spring 源碼 5.3.8 版本已經(jīng)使用這個(gè)包,所以我們需要設(shè)置我們項(xiàng)目配置的 jdk 版本高于9。

排查后,是因?yàn)?idea 配置的 java 編譯的版本是8,改為11即可。

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

最后再次運(yùn)行,就成功了。

手把手帶你編譯Spring框架源碼,讓你的學(xué)習(xí)事半功倍

 

總結(jié)

今天主要分享了如何編譯 spring-framework 源碼如何編譯構(gòu)建,以及怎么導(dǎo)入到 IDEA 中,方便我們測試和閱讀。

其中,在編譯前我結(jié)合自己的實(shí)踐經(jīng)驗(yàn),提出了一些需要優(yōu)化的配置,極大的提高了編譯構(gòu)建的速度以及成功率。比如本地下載 gradle,配置阿里云倉庫等。

正如開頭的對話,我希望可以幫助想深入學(xué)習(xí)Spring,但是卻苦于基礎(chǔ)環(huán)境配置搞不太定的小伙伴。

分享到:
標(biāo)簽:框架 Spring
用戶無頭像

網(wǎng)友整理

注冊時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定