本篇文章主要介绍如何搭建Spring源码开发环境,并新建自己的模块。
一、环境准备
- Git,版本控制工具。
- 拉取Spring源代码需要使用。(如果只下载某个版本的Spring源码,可以不使用。)
- Gradle,项目构建工具。
- 构建Spring项目所需要的工具,和Maven属于同一种类型的工具,Spring项目中自带了Gradle的wrapper运行脚本,可以全自动安装使用。 (暂时不用安装,即使安装也必须使用源码中指定的Gradle版本才可以,不同的Gradle版本很多功能是不兼容的。可以参考我的文章Gradle学习教程进行安装)
- Idea/ Eclipse,集成开发工具
- 方便代码编写、源码调试、类之间跳转、类图查看
二、获取源代码
2.1 fork官方代码到个人仓库
为了方便之后将自己编写的代码或记录进行同步备份
打开Spring代码仓库页面,点击右上角fork
,稍等片刻即可完成。
2.2 下载Spring源码
Spring源码已经下载到了我们的个人仓库,打开个人项目页面,例如我的地址为https://github.com/KimZing/spring-framework
,点击右侧的clone or download
复制仓库地址https://github.com/KimZing/spring-framework.git
。
打开终端,执行git clone 仓库地址
, 源码比较大,静候。
之后使用git chekout v5.2.0.RELEASE
切换到指定的版本分支。(建议使用RELEASE版本,稳定不会做更改)
三、加快你的构建
如果你的网速很好,那么可以略过这一步。如果想加快依赖包的速度,需要对gradle脚本文件进行配置,增加aliyun的maven仓库中心。修改项目根目录下的build.gradle
文件
方式如下:
// 在开始的buildscript中加入如下内容
// 加快构建脚本自身使用的依赖下载。
buildscript {
repositories {
maven{ url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven{ url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
}
dependencies {
classpath 'org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.16'
classpath 'io.spring.asciidoctor:spring-asciidoctor-extensions:0.1.3.RELEASE'
}
}
// 在configure(allprojects)中添加maven仓库。
// 加快项目使用的依赖下载
configure(allprojects) {
dependencyManagement {
repositories {
maven{ url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven{ url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
maven { url "https://repo.spring.io/libs-spring-framework-build" }
}
}
}
四、根据官方文档进行构建
第一次搭建时,整个过程耗费时间很长,耐心等候。
这里使用的Idea进行构建,打开相应分支的项目根目录下的import-into-idea.md文件,按照说明操作即可。
4.1 编译spring-oxm
模块
在项目根目录执行./gradlew :spring-oxm:compileTestJava
,直到出现 BUILD SUCCESS
时说明第一步已经成功了。
4.2 导入Idea
这个不用细说了吧,就是File -> New -> Project from Existing Sources -> Navigate to directory -> Select build.gradle
。导入时一般就会自动进行编译构建,一定要静静的等,耗时比较长。
4.3 排除spring-aspects
模块
某些spring版本的spring-aspects
模块需要使用不同的编译器,而idea里面无法进行配置,所以这个模块会报错,我们可以将其进行忽略,就不会构建了。
右键spring-aspects模块-> 选择Load/Unload modules -> 将spring-aspects加入unload列表即可
到这里整个源码的环境搭建就结束了
五、添加自己的模块并执行
5.1 新建项目
右键根项目spring-framewok
->New
-> Module
-> 选择Gradle->Java
->Next
-> 添加项目命名(spring-kim)
->Finish
,一个属于自己的项目模块就创建完成了。这个时候发现项目目录下的settings.gradle
文件多了一行include 'spring-kim'
, 这是自动添加的,是不是很智能,省去了麻烦。但是这里有一个注意的地方,需要将include 'spring-kim'
移动到rootProject.children.each
的上方,否则spring的构建脚本是无法正确导入我们自定义的这个模块的。(这点可以说明gradle是按照顺序来执行脚本的)
1 | pluginManagement { |
5.2 修改构建脚本,依赖spring-context模块进行测试
将spring-kim
项目下的build.gradle文件修改为spring-kim.gradle
, 为什么要修改呢?看看spring其他模块下是不是都有一个项目名.gradle
文件呢?spring项目的build.gradle
中对每个模块的构建脚本名都做了重新配置,想知道怎么实现的,可以看下我的Gradle学习教程。
改写我们的spring-kim.gradle
脚本内容如下
1 | // 对该模块的描述 |
5.3 编写程序代码
在src/main/java
下新建包com.kimzing.spring
1 | //UserService接口 |
1 | // UserService实现类 |
1 | package com.kimzing.spring; |
5.4 编写配置文件
说一个小技巧: 约束文件一般写起来比较麻烦,可以在
spring-context
模块下的test/resources
下查找xml文件,复制粘贴即可。
1 |
|
5.5 运行Bootstrap
此时运行Bootstrap的main方法,输出如下
1 | > Task :spring-kim:Bootstrap.main() |
到此,环境搭建和测试就完成了,如有问题,可以参考我的github项目