首先要阐述几个问题

1,下载IDEA https://www.jetbrains.com/idea/download/other.html 各个版本都有。

1,spring-framework的源码使用gradle 构建的,所有首先要安装gradle,熟悉gradle用法

gradle 各个版本的下载地址https://services.gradle.org/distributions/

2,spring-framework的源码托管在github上的,地址https://github.com/spring-projects/spring-framework

开始下载源码,如果用git clone 很慢,所有采用下载zip 包到本地然后解压

spring5源码包大概18M,

idea Gradle 引入mysql_idea Gradle 引入mysql

3,使用idea,打开本地解压的spring-framework5源码文件夹,是一个多模块的结构

idea Gradle 引入mysql_spring_02

idea Gradle 引入mysql_spring_03

认识一下两个很重要的配置build.gradle和settings.gradle

build.gradle 是spring-framework 源码构建的一些依赖环境,包括一些依赖的插件,和源码依赖的jar包,因为spring也要依赖一些开源的依赖来构建自己的工程。

以及定义打包流程,构建流水线等等。

idea Gradle 引入mysql_ide_04

settings.gradle是spring-framework的构建配置,是按模块化构建的

idea Gradle 引入mysql_ide_05

idea打开本地的一个工程,导入spring-framework,选择作为gradle工程 ,点击finish ,进去idea工作空间,gradle 会开始自动构建根据build.gradle配置。

idea2018.3.1gradle 的配置 如下 :

idea Gradle 引入mysql_ruby_06

如果网络不好会出现构建失败,下载插件依赖失败。所有要保证网络良好。

idea Gradle 引入mysql_ide_07

问题汇总

问题1

Could not create parent directory for lock file D:\gradle_repo\wrapper\dists\gradle-4.4.1-bin\46gopw3g8i1v3zqqx4q949t2x\gradle-4.4.1-bin.zip.lck

问题2

Could not download jruby-complete.jar (org.jruby:jruby-complete:9.1.12.0): No cached version available for offline mode

问题3

idea Gradle 引入mysql_spring_08

解答:删除环境变量,删除C:\Users\ZLL\.gradle, 重新运行gradle -v

 

idea 2019.3.1 将spring-framework5.1.x 转变为多模块的gradle 的工程,通过gradle面板下的+

idea Gradle 引入mysql_ruby_09

出现如下界面就是ok的了

idea Gradle 引入mysql_ruby_10

 

idea Gradle 引入mysql_ruby_11

idea Gradle 引入mysql_ide_12

 

1,测试目标,spring 主要是IOC(DI), AOP, WEB ,spring-core 是base 依赖,首先编译,build spring-core

idea Gradle 引入mysql_ruby_13

idea Gradle 引入mysql_ruby_14

,看到core模块下生成的build 文件夹就ok了

编译spring-context 

idea Gradle 引入mysql_idea Gradle 引入mysql_15

编写IOC 测试demo,导入gradle 工程依赖 ,类似

idea Gradle 引入mysql_idea Gradle 引入mysql_16

同理

idea Gradle 引入mysql_ruby_17

查看依赖是否导入成功

idea Gradle 引入mysql_idea Gradle 引入mysql_18

编写代码测试ioc

idea Gradle 引入mysql_ide_19

idea Gradle 引入mysql_ide_20

运行spring-context 的测试,这个会编译上面的类

idea Gradle 引入mysql_ide_21

IOC 测试结果

idea Gradle 引入mysql_idea Gradle 引入mysql_22

 

===》测试WEB TODO

 

总结和心得:

下载源码,搭建源码的环境,目的就是为了能够在源码中做笔记,删除代码,修改代码,看各种逻辑,熟悉源码的逻辑

不然那个Jar包下的关联源码也是可以看的,就是不能改。

本次环境

idea2018.3

java8

gradle 5.6.3 在关闭工程外进行的全局配置。

spring-framework5.0.x

 

看源码几个关键技能

1,IDEA环境的,就要熟练各种快捷键,能够很快查找类,关键配置。

2,要会断点调式,尤其是条件断点调试

3,要有个查看方向,基于一个点,不然就像进入了一个很深的丛林不知道出来。

《《《代码在手,天下我有》》》》