使用Idea搭建Spring源码阅读环境
1.将项目克隆到Idea
注意,现在Spring主分支的代码是Spring 6.x,因为目前Spring6还处于测试阶段,而通过官网可知,目前5.3.20才是稳定版本,所以我这里是将5.3.x作为主分支。
更改仓库的默认分支可以在仓库的管理界面设置
这一切办妥后,我们复制仓库链接,然后打开idea
点击Idea工具栏的VCS按钮,然后再点击如图所示:
然后我们再将刚才的url粘贴进去,点击clone就可以了
2.构建项目
因为Spring用的Gradle来管理项目,所以idea会自动下载当前Spring版本所需要的Gradle版本。
Java开发这边很少使用到Gradle来构建项目,基本就是Maven,所以我们也不必再去下载一个全局的Gradle,配置环境变量啥的,我们直接让idea自己下载配置就行了。
如果,你非要自己配置,那么在项目目录下的./gradle/wrapper/gradle-wrapper.properties中可以查看当前Spring项目所需的Geadle版本。
distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https://services.gradle.org/distributions/gradle-7.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists
distributionUrl这个参数的值就是所需的gradle版本
然后,我们还需要指定一下Spring的远程仓库,这里我们选择阿里云的镜像
首先,我们在项目目录中找到build.gradle这个文件,在repositories的值下面加上这两个镜像源
maven { url https://maven.aliyun.com/nexus/content/groups/public/ }
maven { url https://maven.aliyun.com/nexus/content/repositories/jcenter}
修改后如图所示:
再找到settings.gradle这个文件,也是在repositories加上这个镜像源
maven { url "https://maven.aliyun.com/repository/public" }
修改后如图所示:
修改这两个文件后,就可以点击配置文件右上角的刷新符号,开始构建项目了。你也可以点击最上方的Build,然后静静的等待项目构建完成就行了。
所有模块被idea识别就代表构建成功
然后根据目录下的官方导入文档所说,我们需要在项目之前进行预编译:
我们点击idea由上级的gradle,然后先找到spring-core,点击如图所示的按钮进行预编译:
然后再对spring-oxm做同样操作
最后对整个项目进行编译:
然后静静的等待项目进行编译完成就行了。
3.进行测试
编译完成后,我们可以再项目目录下创建一个自己的模块,可以在我们阅读源码期间进行测试。
选择Gradle项目,然后选好名称后finish就行了:
注意,坑爹的地方来了。
idea会自动给我们生成·build.gradle文件,其实就像与Maven项目的pom.xml,我们可以在里面引入Spring的相关模块进行测试,但是因为版本原因,引入的方式与网上很多的文档大有不同
网上大多数文章是像这样导入的:
dependencies {
compile(project(":spring-context"))
compile(project(":spring-instrument"))
compile junit:junit:4.12
compile group: org.hamcrest, name: hamcrest-core, version: 1.3
}
但是idea生成的模板确实这样:
dependencies {
testImplementation org.junit.jupiter:junit-jupiter-api:5.7.0
testRuntimeOnly org.junit.jupiter:junit-jupiter-engine:5.7.0
}
千万不要像网上的文章那样引入模块,因为现在Spring使用的Gradle版本早就升级到7.2.x了,所以之前的引入方式已经在高版本被弃用了,compile命令也已经被弃用,我们可以使用implementation来引入相关的模块,比如,我现在想要引入spring-context模块,那么我可以这样:
dependencies {
implementation(project(":spring-context"))
testImplementation org.junit.jupiter:junit-jupiter-api:5.7.0
testRuntimeOnly org.junit.jupiter:junit-jupiter-engine:5.7.0
}
然后我们就可以使用spring容器相关的API,进行测试了.
