一. 准備工作
1. . 編譯環境
- maven
- jdk8
- idea
2. 編譯版本:
SpringV5.2.7RELEASE+GradleWapper+jdk1.8.0_131編譯
二. 源碼下載
git地址: 進入https://github.com/spring-projects/spring-framework
注: 需要連接FQ軟件才行, 不然git特別慢
版本號介紹
三. 構建工作准備
安裝源碼有兩種方式:
第一種: 下載spring使用的對應的Gradle版本,安裝
第二種: 使用自帶的gradleWrapper.
備注: 我在導入項目到idea的時候, 不能夠選擇使用的gradle編譯類型(使用系統的gradle還是gradleWrapper), 所以, 我是自己安裝了Gradle, 然后編譯的.
查看spring源碼中gradle的版本. 下載對應版本的gradle.
在gradle-wrapper.properties中查看版本號
我們看看到spring5.2.7.RELEASE對應的gradle版本是5.6.4-bin.zip. 我們下載這個文件.
網盤鏈接: https://pan.baidu.com/s/1NduYeCVYJxDbd4YX1XcIEw 密碼: dqcq
如果使用方法二, gradleWrapper會自動下載, 這是官方推薦的方式. window平台的idea可以選擇使用gradleWrapper的方式.
四. 編譯Spring源碼項目
1. 修改build.gradle
設置鏡像 repositories { maven{ url 'https://maven.aliyun.com/nexus/content/groups/public/'} maven{ url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'} mavenCentral() maven { url "https://repo.spring.io/libs-spring-framework-build" } }
2. 編譯compileTestJava模塊
./gradlew :spring-oxm:compileTestJava
3. 導入項目到idea中, 進行編譯
我這里導入代碼, 自動就會進行編譯了. 不需要額外的操作. 這個和idea的版本有關,我的idea是2020.1的
最后提示finished就ok了.
五. 測試源碼編譯是否成功
1. 添加測試模塊代碼
設置項目名, 設置好以后點擊finish
2. 添加測試文件, 測試IoC功能
- 為項目添加依賴
dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' compile(project(":spring-context")) }
compile(project(":spring-context")) 代表本項目的
- 隨意添加一個bean
package com.lxl.www; import org.springframework.stereotype.Service; @Service public class UserServiceImpl { public void sayHi(){ System.out.println("Hello Spring!"); } }
- 添加啟動類
import cn.tulingxueyuan.beans.UserServiceImpl; import javafx.application.Application; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan("com.lxl.www") public class MainStat { public static void main(String[] args) { ApplicationContext context=new AnnotationConfigApplicationContext(MainStat.class); UserServiceImpl bean = context.getBean(UserServiceImpl.class); bean.sayHi(); } }
- 啟動MainStat並運行. 如果看到如下輸出, 表示成功了
代碼依然會報錯, 是一個git的異常, 這個可以忽略. 看到上面編譯成功,並且有打印結果, 就說明成功了.