01. 获取spring源码

Posted java技术探秘

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01. 获取spring源码相关的知识,希望对你有一定的参考价值。

在分析spring源码前,我们需要获取srping源码。

这里的spring源码并不是在maven中引入spring包,然后download源码,这种方法得到的源码是不能做任何修改的。spring源码位于github上,链接:spring-projects/spring-framework[1]

拿到github仓库后,常规的操作是将spring-framwork项目fork到自己的仓库,然后checkout 下来,再对spring-framwork源码为所欲为。但由于各位懂的原因,国内的网络访问github的速度感人,正常来说,直接运行git checkout https://xxx.git结果只会超时,根本拿不到spring代码。为了能对源码自由的pull & push,我们需要对网络进行个加速,规避下网络问题。一说到网络加速,如果你想到的是网络代理,你就out了,现在都流行使用gitee进行规避操作了。咳咳,其实这里使用的是gitee上导入已有仓库功能,步骤如下:

1. 在giteee上建立一个仓库,选择导入已有仓库

2. 在链接中,复制spring项目的github地址

01. 获取spring源码

然后点击创建,稍等一会就可以了。

自此,spring项目就到了你自己的gitee仓库中,可以尽情地对gitee的spring代码仓库进行 checkoutpull & push了。

3. 同步github代码

从github获取代码后,如果github代码更新了,gitee的代码能不能也更新呢?答案是可以的,gitee贴心地为我们做了强制同步操作,可以轻松同步github上的最新更改。

01. 获取spring源码

好了,代码已经检出完成了,速度也是杠杠的,终于可以自由地对spring代码为所欲为了,心里别提多高兴了。但是,我想说的是,你高兴得太早了!不错,这种方式的确可以对源码加注释、修改源码、畅通执行git push,甚至能同步github上的仓库,同步最新的代码,但是这里埋下了一种定时炸弹:这种同步的方法会把你之前所做的修改都覆盖了:

试想下,你之前辛辛苦苦地在master分支上加了好多注释,自诩把spring源码的方方面面都研究过了,以后有遗忘再回头来看下代码上的注释就可以。然后,有那么一天,你手抖点了个强制同步,刹那间,你那些精华无比的注释,全没了!多惨绝人寰!

那么有没有办法规避这个问题呢?经过本人多次的研究与实践,终于发现了一种规避方法:创建新分支。同步github的代码只会覆盖github上已有分支的修改,但如果是在gitee上新建的分支,同步后就不会覆盖了。举例来说,导入github的仓库到gitee后,在gitee仓库中创建分支branch_a,然后再gitee的仓库强制同步github的代码,此时gitee上的分支branch_a不会发生变化。

4. 创建新分支

从gitee上check完spring的源码后,本人并不建议直接在masterv5.x.x等分支上进行操作,主要原因就是同步后会被github上的分支覆盖,因此需要重新创建新分支来分析。新建分支如下:

  1. 使用 git tag查看分支信息
spring-framework $ git tag
v3.0.0.M1
v3.0.0.M2
v3.0.0.M3
v3.0.0.M4
...
v5.2.0.RELEASE
v5.2.1.RELEASE
v5.2.2.RELEASE

可以看到,最新spring的release分支是v5.2.2.RELEASE,因此我们会基于此版本来创建分支。

  1. 基于tag创建分支
# 检出tag
git checkout v5.2.2.RELEASE
# 基于tag创建新分支
git checkout -b v5.2.2.RELEASE_learn v5.2.2.RELEASE
#  将新分支提交到远程仓库
git push -u origin v5.2.2.RELEASE_learn

如此一来,新分支就创建好了

接下来,无论我们如何强制从github更新,分支v5.2.2.RELEASE_learn上 的内容不会发生变化。

这里的分支是基于tag上的release版本创建的,原因也很好解释,无论是master分支,还是5.0.x、5.1.x、5.2.x等分支,都是开发中的分支,代码可能会发生变化,因此不同时间点拿到的代码可能并不一致。那tag上的release会不会变化呢?答案是不会变,例如分支v5.2.2.RELEASE有bug,spring的团队不会在v5.2.2.RELEASE上进行修改,而是基于这个分支创建新分支,在新分支上进行修复,然后再发布v5.2.3.RELEASE版本,不会重新发布v5.2.2.RELEASE.

简而言之,我们基于tag上的RELEASE版本来创建分支,就是为了无论何时获取到的代码都一致。

接下来,本系列的所有分析文章,都是基于v5.2.2.RELEASE_learn这个分支,对应的spring版本是5.2.2.RELEASE,gitee仓库链接:spring-framework.

5. 总结

这里我们对从获取spring源码做个总结:

  • 在github上找到 spring-framework的代码仓库
  • spring-framework的代码仓库导入到gitee
  • 在gitee上,基于 v5.2.2.RELEASE创建分支 v5.2.2.RELEASE_learn

拿到spring代码后,接下来就激动人心的编译环节了,我们在下一篇中介绍。


本文原文链接:https://my.oschina.net/funcy/blog/4523714 ,限于作者个人水平,文中难免有错误之处,欢迎指正!原创不易,商业转载请联系作者获得授权,非商业转载请注明出处。

本系列的其他文章

【spring源码分析】spring源码分析系列目录

参考资料

[1]

spring-projects/spring-framework: https://github.com/spring-projects/spring-framework


以上是关于01. 获取spring源码的主要内容,如果未能解决你的问题,请参考以下文章

01. 获取spring源码

阿里P8架构师手写笔记:Spring源码+JVM+MySQL+Kafka+Tomcat

阿里P8架构师手写笔记:Spring源码+JVM+MySQL+Kafka+Tomcat

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段

Spring源码--01--Spring概述

java获取随机时间的源码片段