88 lines
4.7 KiB
Markdown
88 lines
4.7 KiB
Markdown
# 精尽 Spring MVC 源码分析 —— 调试环境搭建
|
||
|
||
> 因为 `spring-mvc` 项目,是 `spring-framework` 的**子项目**,所以编译的方式,和 [《精尽 Spring 源码分析 —— 调试环境搭建》](http://svip.iocoder.cn/Spring/build-debugging-environment) 是一模一样的。
|
||
|
||
# 1. 依赖工具
|
||
|
||
- Gradle
|
||
- Git
|
||
- JDK1.8+
|
||
- IntelliJ IDEA
|
||
|
||
笔者目前使用的系统版本是 macOS Mojave 10.14 。所以,如果胖友是 Windows 环境,胖到一些问题,请在星球给我留言。
|
||
|
||
另外,本文参考官方提供的文档 [《import-into-idea》](https://github.com/spring-projects/spring-framework/blob/master/import-into-idea.md) 。
|
||
|
||
补充说明 1 :IntelliJ IDEA 请使用 2018 版本,之前有胖友反馈搭建不起来,因为 IDEA 版本过低。
|
||
|
||
# 2. 源码拉取
|
||
|
||
从官方仓库 https://github.com/spring-projects/spring-framework `Fork` 出属于自己的仓库。
|
||
|
||
- 为什么要 `Fork` ?既然开始阅读、调试源码,我们可能会写一些注释,有了自己的仓库,可以进行自由的提交。😈
|
||
- 本文使用的 Spring 版本为 `5.1.1.BUILD-SNAPSHOT` 。
|
||
- 使用 `IntelliJ IDEA` 从 `Fork` 出来的仓库拉取代码。因为 Spring 项目比较大,从仓库中拉取代码的时间会比较长。
|
||
|
||
拉取完成后,Gradle 会开始自动 **Build** 项目。因为 Build 的过程中,会下载非常多的依赖,请耐心等待。
|
||
|
||
- 😈 不过笔者有点不太确定,Gradle 是否会自动 **Build** 项目,反正我的会。如果此处碰到问题,请给我留言。
|
||
|
||
# 3. 预编译 `spring-oxm` 项目
|
||
|
||
打开 IDEA Terminal ,输入如下命令,预编译 `spring-oxm` 项目:
|
||
|
||
```
|
||
./gradlew :spring-oxm:compileTestJava
|
||
```
|
||
|
||
当看到 `BUILD SUCCESSFUL` ,说明编译成功。
|
||
|
||
😈 另外,笔者有点不确定,Gradle 在上面已经自动 **Build** 项目,这个步骤是否还需要。但是笔者不熟悉 Gradle 的机制,官方文档又要求这么做,所以做下也没什么影响。哈哈哈哈。
|
||
|
||
# 4. 运行示例
|
||
|
||
在 `spring-webmvc` 项目中的 `src/test/java` 目录下,已经提供了一些单元测试,我们可以使用它来调试相应的逻辑。
|
||
|
||
后续的文章,艿艿会说明自己所使用的单元测试。
|
||
|
||
# 5. 可能碰到的问题
|
||
|
||
## 5.1 报 InstrumentationSavingAgent 不存在的错误
|
||
|
||
例如说,在运行 `spring-context` 项目中的单元测试时,会报 InstrumentationSavingAgent 存在的错误。此时,我们将 `spring-context.gradle` 修改如下:
|
||
|
||
[](http://static.iocoder.cn/images/Spring/2019-01-01/01.png)`spring-context.gradle` 修改图
|
||
|
||
修改完成后,Gradle 又会自动 **Build** 项目,下载相关依赖。完成后,再次运行 `spring-context` 项目中的单元测试,顺利通过。
|
||
|
||
## 5.2 其它
|
||
|
||
如果胖友你在搭建调试环境的过程中,如果碰到任何问题,可以在星球给我留言。
|
||
|
||
# 666. 彩蛋
|
||
|
||
`spring-framework` 项目下,一共有四个和 web 相关的项目,大体关系如下:
|
||
|
||
[](http://static.iocoder.cn/images/Spring/2022-01-01/01.png)关系图
|
||
|
||
为什么画这个图的原因是,想让胖友知道,`spring-webmvc` 不是一个单独的项目,它有依赖的爸爸 `spring-web` 项目,也有两个兄弟 `spring-webflux` 和 `spring-websocket` 项目。
|
||
|
||
这个系列,我们仅仅分享 `spring-webmvc` 项目,如果对其它感兴趣的胖友,自己 Google 。还是那句话,不要上来就源码,先学使用方法,了解其特性。
|
||
|
||
------
|
||
|
||
艿艿统计了下 `spring-mvc` 项目的代码量,整体的代码量,有点超过我的预期,如下图所示:
|
||
|
||
[](http://static.iocoder.cn/images/Spring/2022-01-01/02.png)代码统计
|
||
|
||
真他喵的代码量多。当然,这个系列,艿艿不会解析所有的代码,而是挑选其中较为核心的部分。不然,真的是精尽人亡。哈哈哈哈。
|
||
|
||
------
|
||
|
||
实际上,市面上已经有两本比较好的,解析 Spring MVC 的书籍,分别是:
|
||
|
||
- [《看透 Spring MVC:源代码分析与实践》](https://item.jd.com/11807414.html)
|
||
- [《Spring 源码深度解析》](https://item.jd.com/11311737.html) 的 [「第 11 章 Spring MVC」](https://svip.iocoder.cn/Spring-MVC/build-debugging-environment/#) 小节
|
||
- 韩路彪 [《看透 Spring MVC:源代码分析与实践》](https://item.jd.com/11807414.html) 的 [「第9章 创建 Spring MVC 之器」](https://svip.iocoder.cn/Spring-MVC/build-debugging-environment/#) 小节hexo
|
||
|
||
艿艿自己在写这个系列时,也参考了里面其中非常多的内容。感谢 1024 。 |