01.搭建 springboot 源码分析环境
Posted java技术探秘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01.搭建 springboot 源码分析环境相关的知识,希望对你有一定的参考价值。
在分析springboot
前,先要搭建源码分析环境,具体来说,就是把springboot
源码checkout
下来,然后创建自己的学习分支,之后就可以对springboot
的源码为所欲为了。
1. 获取springboot源码
springboot
源码托管在github[1]:
不过先别急着checkout
,众所周知,由于某些原因,国内的网络访问github的速度感人,直接checkout
,绝大多数时候都会失败。源码拿不下来,万里长征要死在第一步了吗?当然不是,虽然直接访问github不行,但我们可以迂回进行,答应就在于gitee,我们可以在gitee上导入github项目,具体步骤如下:
1.1 在giteee上建立一个仓库,选择导入已有仓库
1.2 在链接中,复制springboot项目的github地址
然后点击创建,稍等一会就可以了。
自此,springboot
项目就到了你自己的gitee
仓库中,可以尽情地对gitee
的springboot
代码仓库进行 checkout
,pull & push
了。感谢gitee提供的便利功能!
2. 创建新分支
从gitee
上checkout
springboot
的源码后,一般来说是在master分支,这时我们要创建自己的分支来分析,关于为什么要创建自己的分支,原因有二:
-
统一版本:
springboot
的版本那么多,当前master是处于哪个版本呢?最新发布的版本吗?这些比较难说清,所以正确方式是,基于已发布的版本创建自己的分支。 -
同步后不会被覆盖:当我们将
springboot
的源码从github导入到gitee后,gitee上的源码就是我们在导入那一刻的源码了,之后再要同步github的源码该怎么做呢?gitee提供了同步功能,可以很方便地进行源码同步:不过这样同步有个缺点:从github上同步过来,会覆盖原本分支上修改的内容!举个例子,你将
springboot
的源码从github导入到gitee,然后在gitee的master分支上做了大量的笔记,之后点了同步,然后就惊喜地发现,你在master分支上的笔记都不见了,gitee的master分支与github的master完全保持一致了,惊不惊喜?不过,如果创建了自己的分支,就不会被github的分支强制同步了,这就是需要创建自己的分析的原因所在。
了解创建分支的必要性之后,就开始进行分支的创建了,这里我们基于tag来创建新分支,步骤如下:
2.1 查看tag
spring-boot-project $ git tag
v0.5.0.M1
v0.5.0.M2
v0.5.0.M3
v0.5.0.M4
v0.5.0.M5
v0.5.0.M6
...
v2.2.0.RELEASE
v2.2.1.RELEASE
v2.2.2.RELEASE
v2.2.3.RELEASE
v2.2.4.RELEASE
v2.2.5.RELEASE
...
springboot的版本挺多的,这里我们选择v2.2.2.RELEASE
。
为什么基于tag创建分支?tag 是相当于版本记录,里面的分支不能修改,也不能在分支上直接提交代码,也就是,tag创建后,里面的内容就不会再变化了,基于tag打分支适合我们的需求。
为什么springboot的版本要选择
v2.2.2.RELEASE
?目前springboot的最新的版本上v2.3.1.RELEASE
,我们为何不直接分析最新版本呢?主要是因为,v2.2.2.RELEASE
的spring版本是v5.2.2.RELEASE
,而本人之前分析过springv5.2.2.RELEASE
的源码(链接:spring源码分析系列文章汇总[2]),因此这里也选择了v2.2.2.RELEASE
。
2.2 基于tag创建分支
接下来就是基于v2.2.2.RELEASE
创建分支的流程了,命令如下:
# 检出tag
git checkout v2.2.2.RELEASE
# 基于tag创建新分支
git checkout -b v2.2.2.RELEASE_learn v2.2.2.RELEASE
# 将新分支提交到远程仓库
git push -u origin v2.2.2.RELEASE_learn
执行完以上命令后,就可以在gitee上看到分支情况了:
3. 源码编译
springboot 源码编译比较简单,如果开发工具是idea,直接运行Spring Boot Project
模块的 install
命令即可:
运行完成的结果:
4. 创建demo模块
编译成功后,下一步就是着手写自己的测试代码了,这里本人是新建一个模块,把测试代码都写在模块里:
模块名为spring-boot-learn
,位于spring-boot-project
下。这就是一个简单的maven模块创建,没啥好说的,
模块创建完成后,在src/main/java
目录下创建包org.springframework.boot.learn
,后续我们会把测试demo统一放在这里了。
做完这些后,还需要处理下springboot代码风格校验,不然spring-boot-learn
下的代码会因为代码风格不符合规范而编译不过。自己的测试代码当然没必要严格按照springboot的代码风格,因此我们需要在spring-boot/src/chechstyle
目录下的checkstyle-suppressions.xml
添加如下内容:
<suppressions>
...
<!-- 以下是新增内容 -->
<!-- spring-boot-learn -->
<suppress files="[\/]spring-boot-learn[\/]" checks=".*" />
<suppress files="[\/]src[\/]main[\/]java[\/]org[\/]springframework[\/]boot[\/]learn[\/]" checks=".*" />
</suppressions>
之后,spring-boot-learn
模块下的代码就可以按照自己的风格随意编写了。
5. 第一个springboot demo
以上内容就绪之后,就可以着手编写第一个demo了,方式如下:
-
准备controller
package org.springframework.boot.learn.demo01.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* {这里添加描述}
*
* @author chengyan
* @date 2020-12-21 10:31 下午
*/
@RestController
@RequestMapping("/test")
public class TestController {
@RequestMapping("hello")
public String hello() {
return "nice to meet you!";
}
}
-
准备主类
package org.springframework.boot.learn.demo01;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* {这里添加描述}
*
* @author chengyan
* @date 2020-12-20 3:59 下午
*/
@SpringBootApplication
public class Demo01Application {
public static void main(String[] args) {
SpringApplication.run(Demo01Application.class, args);
}
}
运行,结果如下:
访问 http://localhost:8080/test/hello
:
可以看到,demo成功运行了!
本文原文链接:https://my.oschina.net/funcy/blog/4816981 ,限于作者个人水平,文中难免有错误之处,欢迎指正!原创不易,商业转载请联系作者获得授权,非商业转载请注明出处。
【springboot源码分析】springboot源码分析系列文章汇总
参考资料
spring-boot: https://github.com/spring-projects/spring-boot
[2]spring源码分析系列文章汇总: https://my.oschina.net/funcy/blog/4527454
以上是关于01.搭建 springboot 源码分析环境的主要内容,如果未能解决你的问题,请参考以下文章
如何搭建自己的SpringBoot源码调试环境?--SpringBoot源码
如何搭建自己的SpringBoot源码调试环境?--SpringBoot源码