code-learning/springmvc/03-Spring MVC 源码分析-调试环境搭建.md

88 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 精尽 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` 修改如下:
[![`spring-context.gradle` 修改图](03-Spring MVC 源码分析-调试环境搭建.assets/01.png)](http://static.iocoder.cn/images/Spring/2019-01-01/01.png)`spring-context.gradle` 修改图
修改完成后Gradle 又会自动 **Build** 项目,下载相关依赖。完成后,再次运行 `spring-context` 项目中的单元测试,顺利通过。
## 5.2 其它
如果胖友你在搭建调试环境的过程中,如果碰到任何问题,可以在星球给我留言。
# 666. 彩蛋
`spring-framework` 项目下,一共有四个和 web 相关的项目,大体关系如下:
[![关系图](03-Spring MVC 源码分析-调试环境搭建.assets/01-17199769204571.png)](http://static.iocoder.cn/images/Spring/2022-01-01/01.png)关系图
为什么画这个图的原因是,想让胖友知道,`spring-webmvc` 不是一个单独的项目,它有依赖的爸爸 `spring-web` 项目,也有两个兄弟 `spring-webflux``spring-websocket` 项目。
这个系列,我们仅仅分享 `spring-webmvc` 项目,如果对其它感兴趣的胖友,自己 Google 。还是那句话,不要上来就源码,先学使用方法,了解其特性。
------
艿艿统计了下 `spring-mvc` 项目的代码量,整体的代码量,有点超过我的预期,如下图所示:
[![代码统计](03-Spring MVC 源码分析-调试环境搭建.assets/02.png)](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 。