最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot-2.3.x最新版源碼閱讀環(huán)境搭建(基于gradle構(gòu)建)

 更新時(shí)間:2020年08月10日 10:44:10   作者:smart哥  
這篇文章主要介紹了springboot-2.3.x最新版源碼閱讀環(huán)境搭建(基于gradle構(gòu)建),需要的朋友可以參考下

一、前言

跟很多小伙伴聊天,發(fā)現(xiàn)一個(gè)嚴(yán)重的問題,很多小伙伴橫向發(fā)展的貌似很不錯(cuò),很多技術(shù)都能說出一二,但是如果在某個(gè)技術(shù)上深挖一下就不行了,問啥啥不會(huì)。就拿springboot來說,很多同學(xué)止步于springboot的應(yīng)用,再往深處就一問三不知了,那么如何破局呢?smart哥認(rèn)為最好的辦法就是直搗黃龍,要把一個(gè)技術(shù)理解透了,聽別人講一萬遍原理,不如自己撕一遍源碼。

要閱讀源碼那就首先得先搭建源碼閱讀環(huán)境,那么本篇文章就來介紹下Spring Boot的源碼環(huán)境搭建。 鑒于spring團(tuán)隊(duì)已經(jīng)全面拋棄maven構(gòu)建工具而選用gradle來構(gòu)建,而且網(wǎng)上目前看來還沒有文章介紹springboot最新版2.3.x的gradle構(gòu)建(絕大多數(shù)都是maven構(gòu)建),那么本篇文章就是基于gradle來構(gòu)建最新版springboot2.3.2的源碼閱讀環(huán)境。

二、環(huán)境準(zhǔn)備

1、git

拉取源碼使用

2、jdk8及以上

一般小伙伴機(jī)器上都已經(jīng)裝好了

image-20200707211846249.jpg

3、gradle6.5.1

打開 https://services.gradle.org/distributions/ 選擇最新版本:gradle-6.5.1-all.zip(all版本是帶源碼的)

在這里插入圖片描述

下載解壓后目錄結(jié)構(gòu)如下:

在這里插入圖片描述

設(shè)置環(huán)境變量:

在這里插入圖片描述

在這里插入圖片描述

完成后打開cmd,執(zhí)行

gradle -v

在這里插入圖片描述

表示已經(jīng)安裝成功,版本為6.5.1

4、idea2020.1.2

(網(wǎng)上很多朋友表示idea2020之前的版本導(dǎo)入時(shí)始終有問題,建議升級(jí)到2020.1版本,smart哥當(dāng)前使用的就是2020.1.2版本)

不得不說2020.1.2版本真香,之前的版本很多bug都在2020.1中得到修復(fù)。那些個(gè)bug真的會(huì)讓人奔潰。

注意:springboot源碼構(gòu)建、編譯及冒煙測試會(huì)非常的耗內(nèi)存,建議內(nèi)存不足16g的小伙伴升級(jí)下機(jī)器內(nèi)存,最少16g。

三、下載源碼

從官方倉庫 https://github.com/spring-projects/spring-boot Fork 出屬于自己的倉庫。

  • 為什么要 Fork ?既然開始閱讀、調(diào)試源碼,我們可能會(huì)寫一些注釋,有了自己的倉庫,可以進(jìn)行自由的提交。
  • 本文使用的 Springboot 版本為最新的 2.3.x的分支代碼 (2.3.2.BUILD-SNAPSHOT)。
  • 使用 git 從 Fork 出來的倉庫拉取代碼,注意這里為什么不拉取master分支呢?

因?yàn)閟mart哥剛開始就是拉取的master分支,但是master分支依賴的spring版本為spring-5.3.0-M1版本,該版本非穩(wěn)定版本,而且編譯到最后會(huì)出現(xiàn)問題,報(bào)一些spring模塊的5.3.0-M1.jar包不存在或無法下載等一些莫名其妙的錯(cuò)誤, 所以我這邊拉取的是2.3.x分支,這個(gè)分支依賴的spring版本為5.2.7.RELEASE版本。所以我就git clone 2.3.x分支到本地,然后再導(dǎo)入idea中。

具體過程如下:

1、打開 https://github.com/spring-projects/spring-boot,點(diǎn)擊右上角Fork即可,這樣就把spring倉庫fork到自己的倉庫中了。

在這里插入圖片描述

2、選擇一個(gè)目錄,我的是E:\mypro\IdeaProjects\spring-boot-2.3.1,空白處右擊Git Bash Here

執(zhí)行:

git clone -b 2.3.x https://github.com/spring-projects/spring-boot.gi

下載到本地

在這里插入圖片描述

四、開始構(gòu)建

1、打開idea后,【File】->【Open…】,打開剛拉取的spring-boot源碼,點(diǎn)擊ok即可打開,如下圖:

在這里插入圖片描述

打開之后,gradle會(huì)自動(dòng)構(gòu)建,開始下載gradle-6.4-bin.zip工具包,idea中還有一些地方需要設(shè)置,所以先不構(gòu)建,點(diǎn)擊取消,如下圖:

image-20200708172146097.jpg

取消后如下圖:

在這里插入圖片描述

2、選擇【File】->【project Structure…】,打開后點(diǎn)擊左側(cè)Project,然后Project SDK選擇java version 1.8,Project language level選擇8,如下圖:

在這里插入圖片描述

接下來,Modules選擇Project SDK 1.8,點(diǎn)擊ok即可

在這里插入圖片描述

3、設(shè)置完畢之后,打開工程下的gradle->wrapper下的gradle-wrapper.properties文件,注釋掉:

#distributionUrl=https\://services.gradle.org/distributions/gradle-6.4-bin.zip

換成本地的gradle-6.5.1-all.zip,這個(gè)版本是當(dāng)前最新版,而且是帶源碼的。

distributionUrl=file:///e:/dev_env/gradle-6.5.1-all.zip

如圖所示:

在這里插入圖片描述

4、修改工程下的buildSrc下的build.gradle文件,找到如下代碼段,添加阿里云鏡像(不添加的話幾個(gè)小時(shí)也構(gòu)建不完)

repositories {
 //加上阿里云鏡像
 maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
 maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
 maven { url "https://repo.spring.io/plugins-release" }
 mavenCentral()
 gradlePluginPortal()
 maven { url "https://repo.spring.io/release" }
}

如圖:

在這里插入圖片描述

5、繼續(xù)修改同目錄下的settings.gradle文件,這是全局配置文件,也要加上阿里云鏡像,找到如下代碼塊,修改如下:

pluginManagement {
 repositories {
  //加上阿里云鏡像
  maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
  maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
  maven { url "https://repo.spring.io/plugins-release" }
  mavenCentral()
  gradlePluginPortal()
 }
 ......
}

如下圖所示:

在這里插入圖片描述

6、修改工程根目錄下的build.gradle文件(前面修改的是buildSrc下的,注意區(qū)別),同樣是加上阿里云鏡像,紅框中的代碼需要全部加上,且只能加在該文件頭部。

buildscript {
 repositories {
  maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
  maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
  maven { url "https://repo.spring.io/plugins-release" }
 }
}

在這里插入圖片描述

還是這個(gè)文件,繼續(xù)修改,往下找到如下圖的代碼塊,加上阿里云鏡像

allprojects {
 group "org.springframework.boot"

 repositories {
  //阿里云鏡像
  maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
  maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
  mavenCentral()
  ......
 }
 ......
}

在這里插入圖片描述

7、繼續(xù)修改根目錄下的全局配置文件settings.gradle,同樣是加上阿里云鏡像

pluginManagement {
 repositories {
  //阿里云鏡像
  maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
  maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
  mavenCentral()
  ......
 }
 ......
} 

如下圖所示:

在這里插入圖片描述

8、ok,到此才可以開始愉快的構(gòu)建,如下圖,構(gòu)建中。。。

在這里插入圖片描述

經(jīng)過一段時(shí)間之后,構(gòu)建快結(jié)束的時(shí)候,執(zhí)行test這一步的時(shí)候,出現(xiàn)問題(當(dāng)然這一步可以省略,但是smart哥先天的強(qiáng)迫癥不允許),于是開始破解之法。

在這里插入圖片描述

這個(gè)問題乍一看是無從入手的,然后往上找到錯(cuò)誤提示:

file:///E:/mypro/IdeaProjects/spring-boot-2.3.1/spring-boot/buildSrc/build/reports/tests/test/classes/org.springframework.boot.build.testing.TestFailuresPluginIntegrationTests.html#multiProjectParallel()

于是拷貝這一段地址在瀏覽器打開,如下圖所示:

是一段測試報(bào)告

在這里插入圖片描述

繼續(xù)往下查找,找到問題關(guān)鍵所在,heap堆內(nèi)存沒有足夠的空間,錯(cuò)誤如下:

在這里插入圖片描述

9、我本機(jī)是16g內(nèi)存,于是修改idea的bin目錄下的idea.exe.vmoptions文件,修改idea的初始化內(nèi)存和最大內(nèi)存參數(shù):

-Xms1024m,-Xmx4096m

在這里插入圖片描述
在這里插入圖片描述

修改后的文件內(nèi)容如下:

-server
-Xms1024m
-Xmx4096m
-XX:ReservedCodeCacheSize=500m
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-ea
-XX:CICompilerCount=2
-Dsun.io.useCanonPrefixCache=false
-Djdk.http.auth.tunneling.disabledSchemes=""
-XX:+HeapDumpOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-Djdk.attach.allowAttachSelf=true
-Dkotlinx.coroutines.debug=off
-Djdk.module.illegalAccess.silent=true
-Dfile.encoding=UTF-8

10、重新編譯還是報(bào)錯(cuò),于是打開【File】->【Settings】,【Build,Execution,Deployment】->【Compiler】,Build process heap size(Mbytes)改成2000

在這里插入圖片描述

11、重新編譯還是報(bào)錯(cuò),繼續(xù)修改buildSrc目錄下的gradle.properties文件,新增如下配置:

#新增如下配置,解決heap堆內(nèi)存空間不夠問題
gradlePropertiesProp=gradlePropertiesValue
sysProp=shouldBeOverWrittenBySysProp
systemProp.system=systemValue
org.gradle.caching=false
org.gradle.jvmargs=-Xms2048m -Xmx4096m 
org.gradle.parallel=true
org.gradle.daemon=true
org.gradle.configureondemand=true

重點(diǎn)是:org.gradle.jvmargs=-Xms2048m -Xmx4096m

在這里插入圖片描述

配置完重新構(gòu)建,編譯,最后還是報(bào)空間不足,于是將org.gradle.jvmargs內(nèi)存擴(kuò)大一倍,如下:初始4g,最大8g

在這里插入圖片描述

修改完再次重新構(gòu)建,編譯,終于成功??!撒花?。?分10秒,時(shí)間還是很快的。

在這里插入圖片描述

五、源碼測試

1、在springboot-boot-tests模塊下隨便找一個(gè)spring-boot-smoke-test-hibernate52工程來進(jìn)行冒煙測試,打開Hibernate52Application.java文件,直接執(zhí)行main方法啟動(dòng)springboot,成功!

console中出現(xiàn)我們熟悉的圖標(biāo)。

在這里插入圖片描述

2、下面進(jìn)行單元測試,還是在spring-boot-smoke-test-hibernate52下的test目錄中,打開Hibernate52ApplicationTests.java文件,在contextLoads()方法中加一段打印信息:

@Test
void contextLoads() {
 System.out.println("hibernate test....");
}

執(zhí)行Run Test,OK,測試也是沒有問題的,測試結(jié)果如下圖:

在這里插入圖片描述

至此,spring-boot的源碼閱讀環(huán)境全部搭建并測試完畢

六、問題及解決方案

1、TestFailuresPluginIntegrationTests > multiProjectParallel() FAILED
java.lang.AssertionError at TestFailuresPluginIntegrationTests.java:88

在這里插入圖片描述

該問題是junit包下載超時(shí),可能是我機(jī)器網(wǎng)絡(luò)抽風(fēng)了,刷新重新構(gòu)建即可!

2、spring-websocket-5.3.0-M1.jar包找不到

如果小伙伴們拉取的是master分支,就像我在本文開頭講的那樣,此時(shí)報(bào)spring-websocket-5.3.0-M1.jar包找不到,提示在下面的地址中查找。

但是 https://maven.aliyun.com/repository/grails-core/org/springframework/spring-websocket/5.3.0-M1/spring-websocket-5.3.0-M1.jar

這個(gè)鏈接明明是可以下載的,所以smart哥一頭霧水,懵圈了很久。

在這里插入圖片描述

經(jīng)過smart哥多次刷新重新下還是無法下載,于是拋棄master分支,轉(zhuǎn)而拉取2.3.x分支。

在這里插入圖片描述

結(jié)語

到此這篇關(guān)于springboot-2.3.x最新版源碼閱讀環(huán)境搭建(基于gradle構(gòu)建)的文章就介紹到這了,更多相關(guān)springboot源碼閱讀環(huán)境搭建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java 23種設(shè)計(jì)模型詳解

    Java 23種設(shè)計(jì)模型詳解

    本文主要介紹Java 23種設(shè)計(jì)模型,這里整理了詳細(xì)的資料,及實(shí)現(xiàn)各種設(shè)計(jì)模型的示例代碼,有需要的小伙伴可以參考下
    2016-09-09
  • 詳解Spring MVC CORS 跨域

    詳解Spring MVC CORS 跨域

    本篇文章主要介紹了詳解Spring MVC CORS 跨域 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java 中的控制反轉(zhuǎn)(IOC)詳解

    Java 中的控制反轉(zhuǎn)(IOC)詳解

    這篇文章主要介紹了理解Java 中的IOC控制反轉(zhuǎn),具有一定參考價(jià)值,需要的朋友可以了解下,希望能夠給你帶來幫助
    2021-10-10
  • SpringBoot首筆交易慢問題排查與優(yōu)化方案

    SpringBoot首筆交易慢問題排查與優(yōu)化方案

    在我們的微服務(wù)項(xiàng)目中,遇到這樣的問題:應(yīng)用啟動(dòng)后,第一筆交易響應(yīng)耗時(shí)高達(dá)4、5秒,而后續(xù)請求均能在毫秒級(jí)完成,這不僅觸發(fā)監(jiān)控告警,也極大影響了用戶體驗(yàn),本文將結(jié)合日志排查、性能工具分析以及預(yù)熱優(yōu)化手段,總結(jié)出一套完整的排查思路和解決方案
    2025-04-04
  • 詳解如何使用java實(shí)現(xiàn)Open Addressing

    詳解如何使用java實(shí)現(xiàn)Open Addressing

    這篇文章主要介紹了詳解如何使用java實(shí)現(xiàn)Open Addressing,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Spring Boot實(shí)現(xiàn)熱部署的實(shí)例方法

    Spring Boot實(shí)現(xiàn)熱部署的實(shí)例方法

    在本篇文章里小編給大家整理的是關(guān)于Spring Boot實(shí)現(xiàn)熱部署的實(shí)例方法和實(shí)例,需要的朋友們可以參考下。
    2020-02-02
  • Java方法引用原理實(shí)例解析

    Java方法引用原理實(shí)例解析

    這篇文章主要介紹了Java方法引用的原理實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Java SpringBoot 集成 Redis詳解

    Java SpringBoot 集成 Redis詳解

    Redis 是一個(gè)由 Salvatore Sanfilippo 寫的 key-value 存儲(chǔ)系統(tǒng),是跨平臺(tái)的非關(guān)系型數(shù)據(jù)庫。Redis 是一個(gè)開源的使用 ANSI C 語言編寫、遵守 BSD 協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存、分布式、可選持久性的鍵值對(duì)(Key-Value)存儲(chǔ)數(shù)據(jù)庫,并提供多種語言的 API
    2021-10-10
  • Spring MVC實(shí)現(xiàn)一次簡單的CRUD示例

    Spring MVC實(shí)現(xiàn)一次簡單的CRUD示例

    這篇文章主要介紹了Spring MVC實(shí)現(xiàn)一次簡單的CRUD示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • Java CountDownLatch的源碼硬核解析

    Java CountDownLatch的源碼硬核解析

    對(duì)于并發(fā)執(zhí)行,Java中的CountDownLatch是一個(gè)重要的類。為了更好的理解CountDownLatch這個(gè)類,本文將通過例子和源碼帶領(lǐng)大家深入解析這個(gè)類的原理,感興趣的可以學(xué)習(xí)一下
    2022-10-10

最新評(píng)論

霍州市| 揭西县| 舞钢市| 津南区| 宁津县| 梁山县| 边坝县| 大洼县| 长汀县| 安多县| 富宁县| 化隆| 呼和浩特市| 庄河市| 霍林郭勒市| 沭阳县| 临朐县| 西林县| 龙海市| 项城市| 辽中县| 甘德县| 灌南县| 河曲县| 剑川县| 临桂县| 阜新市| 宾川县| 库伦旗| 越西县| 崇仁县| 土默特右旗| 屏山县| 河津市| 梅州市| 共和县| 邹城市| 布尔津县| 于田县| 张家界市| 乌拉特后旗|