【Spring】Spring源碼編譯


環境准備

  • Gradle:5.6.4(類似Maven構建工具)
  • Jdk:1.8.0_181
  • idea:2021.1.1 Community Edition(社區版)

1、下載Spring源碼

  官網地址:https://github.com/spring-projects/spring-framework

  選擇需要的版本下載。

  本例下載的是 5.2.4.RELEASE 版本,下載完后解壓。

  

  源碼中有文件 import-into-idea.md ,導入idea說明文件,可以進行參考

2、使用gradle,編譯compileTestJava模塊

1、gradle版本選擇

  可以參考spring目錄中的gradle版本(5.6.4)

  命令:cat ./gradle/wrapper/gradle-wrapper.properties 

  

  最好使用對應版本的gradle進行編譯,否則可能出現版本問題

2、設置項目的gradle倉庫鏡像

  修改spring項目中的 build.gradle 文件,添加本地倉庫 和 aliyun鏡像

        repositories {
            // 配置先從本地倉庫尋找jar包,優先尋找上一個配置,找到不執行下面的配置
            // 本地倉庫位於USER_HOME/.m2/repository
            mavenLocal()
            // aliyun鏡像
            maven { url 'https://maven.aliyun.com/nexus/content/groups/public/'}
            // Maven的中央倉庫
            mavenCentral()
            // Spring Maven 倉庫
            maven { url "https://repo.spring.io/libs-spring-framework-build" }
        }

3、使用gradle編譯compileTestJava模塊

  進入spring目錄命令:cd /Users/h__d/Downloads/spring-framework-5.2.4.RELEASE

  命令:/Users/h__d/Applications/gradle-5.6.4/bin/gradle :spring-oxm:compileTestJava

  

3、使用Idea打開項目

  File --> Open --> 選擇Spring項目目錄spring-framework-5.2.4.RELEASE

   

4、測試使用

  可以自己找到項目中的測試類進行運行

  本例找的是 spring-context 項目中的 test/java包下的AnnotationConfigApplicationContextTests.java

  java/org/springframework/context/annotation/AnnotationConfigApplicationContextTests.java

  

  運行AnnotationConfigApplicationContextTests.java中的測試方法 registerAndRefresh()

  

  能運行成功,已成功編譯,且能使用

5、可能出現的問題

問題1:類 org.springframework.core.ReactiveAdapterRegistry.CoroutinesRegistrar 的引用問題

  報錯類 ReactiveAdapterRegistry 位置在 spring-core --> src/main/java 中

  

  解決:問題是由於CoroutinesRegistrar類無法引用到引起的,通過搜索找到CoroutinesRegistrar的源碼位置,發現CoroutinesRegistrar是一個kotlin編寫的類

  所以對應模塊中引入它的jar包即可

  

  引入:右鍵 spring-core/kotlin-coroutines/build/libs/kotlin-coroutines-5.2.4.RELEASE.jar --> Add as Library --> Create Library --> 添加到對應的模塊

  也可以在項目中的結構進行設置(File --> Library --> 進行設置),是spring-core.main模塊能夠引用到 kotlin-coroutines-5.2.4.RELEASE.jar 包

  

  

  如果其他項目出現類找不到的問題,也是這種解決方案

6、自定義Spring模塊使用

  參考Spring項目中的其他模塊

1、新建項目目錄sprign-my

  右鍵spring項目名 --> new --> Directory --> 新建目錄

      

  創建maven項目中對應的各種包

  

2、項目中新建文件 spring-my.gradle

description = "Spring MY"

apply plugin: "kotlin"
apply plugin: 'java'

dependencies {

    compile(project(":spring-core"))
    optional(project(":spring-beans"))
    optional(project(":spring-context"))

}

3、在Spring項目中添加模塊spring-my

  找到spring項目配置文件 settings.gradle,增加包含模塊 spring-my

  

  然后刷新grandle項目

  

4、對spring-my模塊進行編碼

  編輯配置類 MainConfig.java

 1 package com.test.my;
 2 import org.springframework.context.annotation.Bean;
 3 import org.springframework.context.annotation.Configuration;
 4 
 5 import java.util.Date;
 6 
 7 @Configuration
 8 public class MainConfig {
 9 
10     @Bean
11     public Date date() {
12         Date date = new Date();
13         return date;
14     }
15 
16 }

  編輯主類 MainStarter.java

 1 package com.test.my;
 2 
 3 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 4 
 5 import java.util.Date;
 6 
 7 public class MainStarter {
 8 
 9     public static void main(String[] args) {
10 
11         // 注解配置引用上下文
12         AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig.class);
13 
14         // 獲取bean
15         Date date = (Date) context.getBean("date");
16         System.out.println(date);
17 
18         // 關閉上下文
19         context.close();
20     }
21 }

5、測試spring-my模塊

  運行主類 MainStarter.java即可

    

7、Gradle發布Spring項目

  參考:【Gradle】maven-publish插件的使用

   1、項目版本修改,在文件gradle.properties 中

version=5.2.4.RELEASE-MY

  2、class.jar和sources.jar及javadoc.jar 三種jar包

  • 打包sourcesJar任務 和 打包javadocJar任務,代碼在 gradle/spring-module.gradle 文件中

  • 發布代碼在gradle/publications.gradle 文件中

  3、執行命令

  打包sourcesJar任務命令:gradle sourcesJar

  打包javadocJar任務命令:gradle javadocJar

  發布到配置倉庫命令:gradle publish

  發布到本地倉庫命令:gradle publishToMavenLocal

  這樣其他項目就根據maven依賴自己編譯的Spring代碼了

可能出現的錯誤

  1、問題:Kotlin插件版本不對

錯誤:/Users/h__d/Documents/git-repository/spring-framework-5.2.4/spring-core/build/libs/spring-core-5.2.4.RELEASE.jar!/META-INF/spring-framework-5.2.4.spring-core.main.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.5.1, expected version is 1.1.16.  

  解決1:

    可能跟idea有關,退出idea,將idea相關配置刪除,使用命令窗口進行發布

  解決2:

    - 刪除idea中原有的Kotlin插件

    - 官網:https://plugins.jetbrains.com,下載對應版本的Kotlin插件

    - idea離線安裝Kotlin插件(可自行百度)

    - 安裝的時候,選擇kotlin/lib/kotlin-plugin.jar 即可  

  2、問題:發布到本地倉庫太慢

  解決:

    - 將 gradle/spring-module.gradle 文件中,注釋掉artifact javadocJar代碼

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
            artifact sourcesJar
//             artifact javadocJar
        }
    }
}

    - 將 gradle/publications.gradle 文件中,pom 相關的注釋掉

publishing {
    publications {
        mavenJava(MavenPublication) {

//             pom {
//                 afterEvaluate {
//                     name = project.description
//                     description = project.description
//                 }
//                ......
//             }

        }
    }
}

 

 


免責聲明!

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



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