SpringBoot官網:https://github.com/spring-projects/spring-boot
SpringBoot項目在2.3.0之前是使用Maven構建項目的,在2.3.0之后是使用Gradle構建項目了
本章將介紹2種方式的源碼編譯構建
SpringBoot-2.2.5源碼編譯
SpringBoot-2.2.5 是 Maven構建項目
環境准備
- Maven:3.6.3
- Jdk:1.8.0_181
- idea:2021.1.1 Community Edition(社區版)
1、下載Spring源碼
SpringBoot官網:https://github.com/spring-projects/spring-boot
下載版本 :2.2.5
源碼中有文件 README.adoc ,可以進行參考如何編譯
2、使用Maven編譯SpringBoot源碼
1、解壓SpringBoot源碼項目
2、進入SpringBoot源碼目錄,打開pom文件,可以修改版本號,避免與官網的版本沖突
<properties> <revision>2.2.5.RELEASE-MY</revision> <main.basedir>${basedir}</main.basedir> </properties>
3、使用maven命令進行編譯
命令:mvn clean install -DskipTests
編譯成功
可能出現的問題
1、問題:Could not find artifact org.springframework.boot:spring-boot-starter-parent:pom:2.2.5.RELEASE in nexus-aliyun (http://maven.aliyun.com/nexus/content/groups/public/)
意思是無法在阿里雲的鏡像倉庫中找到資源
解決:將配置的鏡像刪除即可,讓它從Maven中央倉庫中獲取資源
2、問題:[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:3.1.0:check (nohttp-checkstyle-validation) on project spring-boot-build: You have 1 Checkstyle violation. -> [Help 1]
代碼檢測插件問題,
解決:在根目錄下的pom文件中,缺少一個屬性,添加一個disable.checks屬性,如下:
<properties>
<revision>2.2.5.RELEASE-MY</revision>
<main.basedir>${basedir}</main.basedir>
<!-- 添加屬性 -->
<disable.checks>true</disable.checks>
</properties>
3、將SpringBoot項目導入Idea中,驗證
運行測試文件 org.springframework.boot.BannerTests#testDefaultBanner()
運行成功,編譯完成
可能出現的問題
1、問題:java: 服務配置文件不正確, 或構造處理程序對象javax.annotation.processing.Processor: Provider org.springframework.boot.configurationprocessor.ConfigurationMetadataAnnotationProcessor not found時拋出異常錯誤
解決:錯誤原因無法找到ConfigurationMetadataAnnotationProcessor類,查看ConfigurationMetadataAnnotationProcessor類是spring-boot-configuration-processor項目中的類,但是項目中的target目錄確實沒有,當讀對spring-boot-configuration-processor項目進行編譯,在target目錄中生存ConfigurationMetadataAnnotationProcessor類的class文件,即可解決
SpringBoot-2.3.0源碼編譯
SpringBoot-2.2.5 是 Gradle構建項目
環境准備
- Gradle:6.4(類似Maven構建工具)
- Jdk:1.8.0_181
- idea:2021.1.1 Community Edition(社區版)
1、下載Spring源碼
SpringBoot官網:https://github.com/spring-projects/spring-boot
下載版本 :2.3.0
源碼中有文件 README.adoc ,可以進行參考如何編譯
同上
2、使用Gradle編譯SpringBoot源碼
1、解壓SpringBoot源碼項目
2、進入SpringBoot源碼目錄,打開 gradle.properties 文件,可以修改版本號,避免與官網的版本沖突
version=2.3.0.RELEASE-MY
3、配置項目依賴倉庫 與 插件倉庫
依賴倉庫添加本地maven倉庫 與 阿里鏡像倉庫,文件 build.gradle
allprojects { ...... repositories { // 本地倉庫位於USER_HOME/.m2/repository mavenLocal() // aliyun鏡像 maven { url 'https://maven.aliyun.com/nexus/content/groups/public/'} mavenCentral() if (!version.endsWith('RELEASE')) { maven { url "https://repo.spring.io/milestone" } } if (version.endsWith('BUILD-SNAPSHOT')) { maven { url "https://repo.spring.io/snapshot" } } } ...... }
插件倉庫 添加本地maven倉庫 與 阿里鏡像倉庫,文件 settings.gradle
且將插件 io.spring.gradle-enterprise-conventions 注釋
pluginManagement { repositories { // 本地倉庫位於USER_HOME/.m2/repository mavenLocal() // aliyun鏡像 maven { url 'https://maven.aliyun.com/nexus/content/groups/public/'} mavenCentral() gradlePluginPortal() maven { url 'https://repo.spring.io/plugins-release' } if (version.endsWith('BUILD-SNAPSHOT')) { maven { url "https://repo.spring.io/snapshot" } } } ...... } plugins { id "com.gradle.enterprise" version "3.2" // id "io.spring.gradle-enterprise-conventions" version "0.0.2" }
3、使用gradle命令進行編譯構建,-x test 是跳過測試
命令:gradle build -x test
可能出現的問題
1、問題:構建時需要用到一些jar或者插件,用於網絡原因無法下載
解決:建議使用代理,進行下載
2、問題:構建時需要用到一些jar或者插件,如:jar無法找到資源。
解決:手動去網上下載資源,然后通過maven命令安裝到maven倉庫
命令:mvn install:install-file -DgroupId=org.gradle -DartifactId=test-retry-gradle-plugin -Dversion=1.1.3 -Dpackaging=jar -Dfile=test-retry-gradle-plugin-1.1.3.jar
3、將SpringBoot項目導入Idea中,驗證
1、導入idea中,配置gradle,使用gradle-6.4版本的
2、運行測試文件 org.springframework.boot.BannerTests#testDefaultBanner()
同上
3、發布到Maven倉庫
命令:gradle publishToMavenLocal