【SpringBoot】SpringBoot源碼編譯


  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

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM