国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

IDEA編譯Spring源碼教程

這篇具有很好參考價(jià)值的文章主要介紹了IDEA編譯Spring源碼教程。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

  大家在學(xué)習(xí)spring時(shí)源碼總是繞不開的,今天我分享一下我的spring源碼編譯過程,詳細(xì)講解了常見問題的解決辦法。

  此過程中要用到的工具及版本:

    1.JDK11

    2.Spring-framework 5.3.27

    3.Gradle7.5.1

    4.IDEA 2021.3

文章目錄:

    1.下載spring源碼

    2.閱讀spring官方編譯文檔

    3.修改gradle相關(guān)配置

    4.開始編譯構(gòu)建

    5.導(dǎo)入IDEA

    6.測試驗(yàn)證

    7.總結(jié)

1.下載spring源碼

  首先從spring官網(wǎng)https://spring.io/下載源碼,spring全家桶包含許多框架,我們選擇今天的主角spring-framework,

IDEA編譯Spring源碼教程

?

  我們可以看到,目前官網(wǎng)上最新版本是6.0.8,更新速度還是很快的,每個(gè)版本更新的新特性可以適當(dāng)了解一下,生產(chǎn)環(huán)境不建議用最新版本。今天我選擇一個(gè)常用的穩(wěn)定版本5.3.27來編譯測試。

點(diǎn)右上角的github圖標(biāo)進(jìn)入GitHub上的源碼頁面,頁面默認(rèn)為最新版本,若要編譯最新版本直接git clone即可,但是我選擇右邊release,找到我想要的歷史版本5.3.27,選擇zip包下載即可下載源碼。

IDEA編譯Spring源碼教程

?

IDEA編譯Spring源碼教程

IDEA編譯Spring源碼教程

?

?為了方便大家,可以直接點(diǎn)擊此處連接進(jìn)行下載?https://github.com/spring-projects/spring-framework/archive/refs/tags/v5.3.27.zip

2.閱讀spring官方編譯文檔  

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

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

  官方文檔一般都是英文,但是別害怕,找個(gè)有道翻譯,一下就搞定了。

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

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

IDEA編譯Spring源碼教程

  ?用記事本打開會(huì)看到里面有一個(gè)build from source?的連接,對(duì)應(yīng)的就是spring源碼官方編譯文檔了:https://github.com/spring-projects/spring-framework/wiki/Build-from-Source

IDEA編譯Spring源碼教程

  接下來,咱們就按照文檔來編譯?Spring-Framework5.3.27?版本的源碼。 根據(jù)文檔的說明,首先我們要有一個(gè)?JDk11?或者更高的版本環(huán)境

  我電腦安裝的是?JDk8,但是會(huì)報(bào)錯(cuò):程序包jdk.jfr不存在,經(jīng)過排查發(fā)現(xiàn)jdk8的lib中是沒有jfr這個(gè)包的,所以我換了JDK11進(jìn)行編譯。

    IDEA編譯Spring源碼教程

? 3.修改gradle相關(guān)配置

  接下來我們需要修改一堆配置,確保編譯的環(huán)境。

  下載gradle

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

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

    打開spring源碼包,找到里面一個(gè)叫g(shù)radle的子工程,里面有相關(guān)gradle的配置。

IDEA編譯Spring源碼教程

?打開配置文件gradle-wrapper.properties,有如下內(nèi)容:

1 distributionBase=GRADLE_USER_HOME
2 distributionPath=wrapper/dists
3 distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
4 zipStoreBase=GRADLE_USER_HOME
5 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)建議保持不變。

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=file\:///D:/mysoft/Program-files/gradle-7.5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

  上述配置的意思就是如果我們運(yùn)行 ./gradlew 會(huì)自動(dòng)去?file\:///D:/mysoft/Program-files/gradle-7.5.1-bin.zip?這個(gè)目錄下載一個(gè) gradle 到當(dāng)前用戶的 .gradle\wrapper\dists目錄 ,然后解壓到當(dāng)前用戶的 .gradle\wrapper\dists 目錄。切記:distributionUrl這個(gè)本地路徑中不能有空格,否則會(huì)報(bào)錯(cuò)的?

IDEA編譯Spring源碼教程?

?

?  改完上面的配置后,我們修改gradle倉庫的配置。與maven類似,gralde下載依賴包默認(rèn)是從國外倉庫下載的,那就會(huì)超級(jí)慢,我們要把倉庫地址改為國內(nèi)的阿里云倉庫,提高編譯速度。

?  找到spring源碼根目錄下的build.gradle,添加阿里云倉庫地址  

        IDEA編譯Spring源碼教程

?  

1 maven { url 'https://maven.aliyun.com/repository/public' } //阿里云

?

  第二步,找到spring源碼根目錄下的settings.gradle,添加阿里云倉庫

        IDEA編譯Spring源碼教程

  第三步(可以不配置),gradle下載依賴的位置。

    gradle默認(rèn)下載依賴的位置是根據(jù)環(huán)境變量GRADLE_USER_HOME決定,默認(rèn)是在C:\Users\用戶名\.gradle\caches\modules-2\files-2.1? 路徑中,因?yàn)橹耙恢庇玫膍aven庫,這里我們配置環(huán)境變量GRADLE_USER_HOME也指向maven本地倉庫的地址。

        IDEA編譯Spring源碼教程

?

4.開始構(gòu)建編譯

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

      IDEA編譯Spring源碼教程

  ?根據(jù)提示文檔,在導(dǎo)入idea之前要提前先編譯spring-oxm、spring-core這兩個(gè)模塊

  在spring源碼根目錄打開一個(gè)cmd命令窗口,執(zhí)行以下命令進(jìn)行編譯,如果cmd命令遇到:'.' 不是內(nèi)部或外部命令,也不是可運(yùn)行的程序? 這個(gè)錯(cuò)誤時(shí),說明gradle環(huán)境沒有配置好,可以配置下gradle環(huán)境變量,或者直接打開一個(gè)powershell窗口進(jìn)行編譯即可。

  

1 ./gradlew :spring-oxm:compileTestJava

  編譯之后發(fā)現(xiàn)報(bào)錯(cuò):

IDEA編譯Spring源碼教程

?  這個(gè)問題就是上面說的JDK版本問題,我本地用的jdk8,但是jdk8沒有jfr這個(gè)包,我們升級(jí)jdk11就可以了,接著編譯:

IDEA編譯Spring源碼教程

?第一次預(yù)編譯應(yīng)該會(huì)很慢,gradle需要下載依賴包,只需要耐心等待即可。

  接下來編譯第二個(gè)模塊,spring-core,執(zhí)行以下命令,可以看到編譯成功。

1 ./gradlew :spring-core:compileTestJava

  IDEA編譯Spring源碼教程

?5.導(dǎo)入IDEA

  打開IDEA,左上角依次點(diǎn)擊:File->New->Project from Existing Sources  

  IDEA編譯Spring源碼教程

  ?選擇源碼的根目錄:

  IDEA編譯Spring源碼教程

?選擇編譯工具為gradle

  IDEA編譯Spring源碼教程

?點(diǎn)擊完成之后,就打開了項(xiàng)目,第一次打開會(huì)進(jìn)行編譯下載依賴包,需要等一會(huì)兒,具體時(shí)間長短要看電腦性能,

過了一會(huì)兒發(fā)現(xiàn)我的編譯報(bào)錯(cuò)了,

  IDEA編譯Spring源碼教程

  ?如果出現(xiàn)這個(gè)錯(cuò)誤的話,基本上就是IDEA與gradle的版本不一致問題,在網(wǎng)上搜的話都會(huì)讓你修改gradle各種配置,但即使修改好了,也會(huì)出現(xiàn)另外的問題,聽我的,一定直接升級(jí)IDEA版本,我之前用的是2019.2,版本缺失有點(diǎn)老了,升級(jí)到了2021.3,問題立馬就解決了,而且新版本的IDEA比老版本性能也提升不少,該升級(jí)就升級(jí)。

  升級(jí)完版本之后繼續(xù)編譯會(huì)看到下面的編譯成功信息:

  IDEA編譯Spring源碼教程

?接下來,我們對(duì)IDEA進(jìn)行一些配置,改成使用我們本地的gralde和本地的maven倉庫,這樣編譯會(huì)更快,

  IDEA編譯Spring源碼教程  

  IDEA編譯Spring源碼教程

  ?至此,IDEA編譯spring源碼就算大功告成了。

6.驗(yàn)證測試

  ?編譯成功了之后,我們新建一個(gè)模塊,用來寫自己的一些代碼。

  1.在IDEA中新建module,

  IDEA編譯Spring源碼教程

?

IDEA編譯Spring源碼教程

  ?輸入我們的模塊名稱,點(diǎn)擊Finish即可。

IDEA編譯Spring源碼教程

  ?2.創(chuàng)建好模塊之后,我們需要對(duì)gradle進(jìn)行一下配置,添加spring依賴,就像是在maven的pom文件里添加依賴一樣

1 implementation(project(":spring-context"))
2 implementation(project(":spring-core"))

如下圖:

IDEA編譯Spring源碼教程

?3.編寫測試類代碼

  編寫配置類代碼,指定spring掃描bean的路徑

1 package com.test;
2 
3 import org.springframework.context.annotation.ComponentScan;
4 import org.springframework.context.annotation.Configuration;
5 
6 @ComponentScan("com.test")
7 @Configuration
8 public class AppConfig { //掃描com.test下的所有bean
9 }

  編寫一個(gè)service,可以被掃描到

 1 package com.test;
 2 
 3 import org.springframework.stereotype.Service;
 4 
 5 @Service
 6 public class TestService {
 7     
 8     public void helloWorld(){
 9         System.out.println("Hello World");
10     }
11     
12 }

  最后獲取到這個(gè)bean,并調(diào)用bean的方法

 1 package com.test;
 2 
 3 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 4 
 5 public class Atest {
 6     
 7     public static void main(String[] args) {
 8         
 9         AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
11         
12         TestService testService = (TestService)context.getBean("testService");
13         testService.helloWorld();
14     }
15     
16 }

?運(yùn)行我們的測試方法,輸出以下結(jié)果:

IDEA編譯Spring源碼教程

?  這就是測試的service中helloworld()方法輸出的內(nèi)容,說明我們的soring已經(jīng)配置好了可以使用了。

  如果在運(yùn)行時(shí)出現(xiàn)以下異常報(bào)錯(cuò),說明我們的jdk版本過低,需要將IDEA中編譯環(huán)境設(shè)置的高一點(diǎn)。

    IDEA編譯Spring源碼教程

?修改如下的配置,將IDEA的jdk版本還有編譯級(jí)別都設(shè)置的高于java8 ,我這里用的是jdk11,所以設(shè)置成11。

IDEA編譯Spring源碼教程

?

IDEA編譯Spring源碼教程

?

IDEA編譯Spring源碼教程

?最后,也是最重要的一步,將setting中的編譯級(jí)別改為11,就可以成功執(zhí)行了。

IDEA編譯Spring源碼教程

?7.總結(jié)

?  至此,整個(gè)spring源碼編譯過程已經(jīng)完成。每個(gè)版本的spring源碼對(duì)應(yīng)的編譯過程,都會(huì)出現(xiàn)各種各樣的問題,大家只要按照官方文檔、多搜搜資料就可以順利解決問題了,如果大家編譯過程中有什么問題,歡迎留言進(jìn)行探討。希望此文對(duì)大家學(xué)習(xí)sprig有所幫助。文章來源地址http://www.zghlxwxcb.cn/news/detail-419395.html

到了這里,關(guān)于IDEA編譯Spring源碼教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • IDEA 導(dǎo)入 spring 源碼

    IDEA 導(dǎo)入 spring 源碼

    我們?cè)趯W(xué)習(xí) spring 源碼的時(shí)候,有時(shí)候是需要在閱讀源碼的時(shí)候添加一些代碼注釋,或者是對(duì)源碼的一些感悟,如果沒有將 spring 的源碼導(dǎo)入到 IDEA 中,單純是通過 Maven 去閱讀 jar 的形式是無法添加一些注釋信息的,即便可以通過一些比如像 Private Notes 這樣的插件做到在源代碼

    2024年02月04日
    瀏覽(18)
  • Spring源碼編譯-for mac

    Spring源碼編譯-for mac

    超詳細(xì)的spring源碼編譯 記:編譯成功時(shí)間:2023.08.19 環(huán)境準(zhǔn)備: 1.idea 2023.1.1 Community Edition 2.jdk1.8 3.gradlegradle-5.6.4 4.spring源碼(版本:spring-framework-v5.2.25.RELEASE) github 加速網(wǎng)站,速度快,有條件的可以去github下載。 https://gitcode.net/mirrors/spring-projects/spring-framework?utm_source=csdn_githu

    2024年02月11日
    瀏覽(25)
  • idea設(shè)置自動(dòng)編譯spring boot代碼,idea代碼修改后無須重啟服務(wù)立即生效

    idea設(shè)置自動(dòng)編譯spring boot代碼,idea代碼修改后無須重啟服務(wù)立即生效

    系統(tǒng)環(huán)境:windows 10 idea版本:IntelliJ IDEA 2022.2.3 (Ultimate Edition) springBoot版本:2.2.6.RELEASE 在Spring Boot開發(fā)應(yīng)用程序時(shí),需經(jīng)常要進(jìn)行頻繁的代碼修改和調(diào)試。 為了更好的提高開發(fā)效率,希望能夠自動(dòng)編譯和熱更新應(yīng)用程序,以便我們?cè)谛薷拇a后無需手動(dòng)多次進(jìn)行重新啟動(dòng)應(yīng)用

    2024年04月13日
    瀏覽(32)
  • 到了這個(gè)年紀(jì),就應(yīng)該閱讀Spring源碼了,源碼閱讀指南-編譯加運(yùn)行

    到了這個(gè)年紀(jì),就應(yīng)該閱讀Spring源碼了,源碼閱讀指南-編譯加運(yùn)行

    Spring的源碼地址 https://github.com/spring-projects/spring-framework 我們先把他clone下來 沒梯子的話多clone幾遍就好了 我們這里使用5.x的版本 設(shè)置里面gradle設(shè)置按照如下圖設(shè)置即可 ??gradle介紹(插敘手法) 由于Spring源碼都是使用Gradle來管理項(xiàng)目 按理來說我們gradle和maven類似,需要在本

    2023年04月09日
    瀏覽(30)
  • IDEA+spring boot+mybatis+spring mvc+bootstrap+Mysql停車位管理系統(tǒng)源碼

    IDEA+spring boot+mybatis+spring mvc+bootstrap+Mysql停車位管理系統(tǒng)源碼

    隨著時(shí)代和科技的進(jìn)步,人們的生活水平越來越高,私家車的數(shù)量不斷上漲,隨之產(chǎn)生了一些問題,其中就包括停車難,很多地方人們根本找不到停車位,經(jīng)常有司機(jī)為了找停車位轉(zhuǎn)來轉(zhuǎn)去,走了很多彎路,更重要的是浪費(fèi)了大量的時(shí)間。 而停車場車位管理系統(tǒng)可以使司機(jī)清

    2024年02月12日
    瀏覽(26)
  • IDEA+Spring Boot + MyBatis + Layui+Mysql垃圾回收管理系統(tǒng)源碼

    IDEA+Spring Boot + MyBatis + Layui+Mysql垃圾回收管理系統(tǒng)源碼

    本系統(tǒng)實(shí)現(xiàn)了垃圾回收管理系統(tǒng),管理端實(shí)現(xiàn)了管理員登錄、垃圾回收管理、添加需要回收的垃圾、垃圾去向管理、申請(qǐng)需要打包運(yùn)出的垃圾、系統(tǒng)公告管理、個(gè)人信息管理、修改密碼 JDK版本:1.8 Mysql:5.7 賬號(hào):好貴啊 密碼:123456 點(diǎn)擊以下鏈接獲取源碼。 IDEA+Spring Boot + MyBati

    2024年02月13日
    瀏覽(19)
  • 在 IDEA 中創(chuàng)建 Spring Boot 項(xiàng)目的方式(詳細(xì)步驟教程)

    以下是我的開發(fā)環(huán)境 JDK 1.8 Maven 3.6.3 IDEA 2019(2019 無所畏懼,即使現(xiàn)在已經(jīng) 2023 年了哈哈哈) 下面的內(nèi)容可能會(huì)因 IDEA 版本不同,而有些選項(xiàng)不同,但是大同小異。 點(diǎn)擊 Create New Project 點(diǎn)擊左邊的 Maven,默認(rèn)選擇你的 JDK,然后點(diǎn)擊 Next。 輸入你的項(xiàng)目名稱、存儲(chǔ)位置、組等信

    2024年02月03日
    瀏覽(24)
  • Spring原碼學(xué)習(xí)第一篇:Spring源碼概述

    Spring原碼學(xué)習(xí)第一篇:Spring源碼概述

    1、Spring獲取對(duì)象的過程 2、Spring源碼概述圖: 2、一些重要的接口 BeanDefinition中實(shí)現(xiàn)的方法,把xml中定義的對(duì)象封裝為一個(gè)對(duì)象,方便后面處理 4、BeandefinitionReader BeandefinitionReader 作為一個(gè)抽象層來處理配置文件,定義規(guī)范,方面擴(kuò)展,如果再有其他格式的配置文件的話,直接

    2024年02月13日
    瀏覽(25)
  • spring源碼學(xué)習(xí)

    spring源碼學(xué)習(xí)

    1.xmlBeanFactory對(duì)defaultListableBeanFactory類進(jìn)行擴(kuò)展,主要用于從XML文檔中獲取BeanDefinition,對(duì)于注冊(cè)及獲取bean都是使用從父類DefaultListableBeanFactory繼承的方法去實(shí)現(xiàn)。 xmlBeanFactory 主要是使用reader屬性對(duì)資源文件進(jìn)行讀取和注冊(cè)。 2.循環(huán)依賴。創(chuàng)建bean,核心方法 getBean → doGetBean →

    2024年02月06日
    瀏覽(15)
  • 集群部署項(xiàng)目時(shí),Spring Task的坑大家一定要注意

    集群部署項(xiàng)目時(shí),Spring Task的坑大家一定要注意

    我們要在下面的代碼中,實(shí)現(xiàn)每5秒鐘執(zhí)行一個(gè)打印信息的任務(wù)。 首先我們可以通過“Edit Configurations”,增加一個(gè)運(yùn)行實(shí)例的配置。 接著啟動(dòng)項(xiàng)目的多個(gè)實(shí)例即可,如下圖所示: 然后我們就可以查看上面代碼的執(zhí)行結(jié)果了,如下圖: 通過對(duì)比執(zhí)行結(jié)果,我們會(huì)發(fā)現(xiàn),有兩個(gè)

    2024年02月12日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包