Spring 5.2.x 源码环境搭建(Windows 系统环境下)

本文参考自博客 //blog.csdn.net/qq_41907991/article/details/107101967,有改动。

参考官方文档:
//github.com/spring-projects/spring-framework/wiki/Build-from-Source
//github.com/spring-projects/spring-framework/blob/master/import-into-idea.md

前期准备

1、确保本机已经安装好了 Git

2、Jdk 版本至少为 1.8

3、安装好 IntelliJ IDEA (其他开发工具,如 eclipse、Spring Tool Suite 等也是可以的),因为使用 IDEA 可以直接比较版本间的差异,如图所示:

源码构建

1、获取 Spring 源码
在需要使用 git clone 命令的方式将源码拉取到本地,命令如下:

git clone //github.com/spring-projects/spring-framework.git

然后切换到 5.2.x 分支,命令如下:

git checkout origin/5.2.x

这个过程可能会耗费比较长的时间,此外还可以直接下载源码压缩包,如图所示:

2、添加阿里云镜像
在编译过程中,Spring 会自动下载依赖包,默认使用的是官方镜像,下载比较慢,所以我们提前添加好国内镜像,将下面这行代码粘贴到 build.gradle 文件中的 repositories 节点下即可:

//添加阿里云镜像
maven { url "//maven.aliyun.com/nexus/content/groups/public" }

如下图所示:

3、预先编译 spring-oxm 模块
打开命令行窗口,并切换到源码所在文件夹,执行以下命令:

gradlew :spring-oxm:compileTestJava

出现 BUILD SUCCESS 字样时说明构建成功。

4、根据编译后的源码下载并安装对应的版本的 Gradle
在完成 spring-oxm 模块的编译后,会在当前目录生成一个 .gradle 的文件夹:

打开后可以查看对应的 Gradle 版本:

可以直接在 //gradle.org/releases/ 网站上下载对应的版本,注意要选择 binary-only 的。

安装好后记得配置 Gradle 的环境变量:
新增 GRADLE_HOME 环境变量,指向 Gradle 解压目录
配置 Path 环境变量:追加 %GRADLE_HOME%\bin

之后测试是否安装成,在命令行中输入:gradle -v 即可查看版本。

5、给 Gradle 配置国内镜像
进入 Gradl e安装目录,在 init.d 目录下新建 init.gradle 文件,并添加以下内容:

allprojects{
    repositories {
        def REPOSITORY_URL = '//maven.aliyun.com/nexus/content/groups/public/'
        all { ArtifactRepository repo ->
            def url = repo.url.toString()
            if ((repo instanceof MavenArtifactRepository) && (url.startsWith('//repo1.maven.org/maven2') || url.startsWith('//jcenter.bintray.com'))) {
                project.logger.lifecycle 'Repository ${repo.url} replaced by $REPOSITORY_URL .'
                remove repo
            }
        }
        maven {
            url REPOSITORY_URL
        }
    }
}

操作步骤如下图所示:

6、将代码导入到 IDEA 中
6.1、打开 IDEA 并选择导入项目

6.2、选择导入一个 Gradle 项目

6.3、配置导入的项目

点击 Finish 后等待 IDEA 构建完项目,如果配置了 Gradle 的国内镜像,这个过程应该不会太久。构建完成后整个项目结构如下:

如果你跟我一样是直接检出的代码,记得将分支切换到 5.2.x,如图所示:

7、构建整个项目
选择 Build > Build Project

可能出现的问题

1、AnnotationCacheAspect找不到符号
在这个过程中你可能会碰到如下错误:

这是因为AnnotationCacheAspect.aj 不是java文件需要另外的aspectj进行处理,可以按照以下步骤解决这个问题

打开命令行,cd到AspectJ的jar包所在的文件夹,运行java -jar aspectj-1.9.4.jar命令,打开AspectJ的安装界面,直接点击Next,如下图:

接着选择 jdk 的安装路径,继续 Next:

接着选择 AspectJ 的安装路径,然后 Install 安装:

2、IDEA 中配置 aspectj
确保以下两个插件已经被激活

  • Spring AOP/@AspectJ
  • AspectJ Support

将编译器改为 Ajc,接着设置Ajc的安装目录,选择到aspectjtools.jar,同时,一定要将Delegate to Javac选项打钩,这个代理设置的作用只对指定的项目进行Ajc编译,其他的项目还是用默认的javac编译器编译。如果不勾选这个代理选项,则全部项目都使用Ajc编译器编译,可能会导致编译错误。

3、指定需要使用 Ajc 编译的项目
分别为 spring-aop 及 spring-aspects 添加 Facets 属性。
点击 File –> Project Structure –> Facets,选择 spring-aop.main,点击 OK
点击 File –> Project Structure –> Facets,选择 spring-aspects.main,点击 OK
完成添加,如下图所示:

完成上述步骤后,再次选择Build > Build Project,成功完成编译

添加测试模块

1、右键工程名 —> new —> module

2、选择 Gradle 及 Java

3、输入模块名称

点击 next —> Finish 完成测试模块的创建
最后,添加一些必要的依赖,修改创建好的模块中的 build.gradle 文件,添加如下三个依赖:

compile(project(":spring-aop"))
compile(project(":spring-context"))
optional("org.aspectj:aspectjweaver")

如下图所示:

至此就完成了整个 Spring 源码的编译,并且创建了一个可供日后学习使用的模块!

最后,附一个《Spring 源码分析环境搭建》的短视频:
//mp.weixin.qq.com/s?__biz=MzI1NDY0MTkzNQ==&mid=2247489263&idx=1&sn=e1a7fc61d7e70b0efc72eefdf801fdc1&chksm=e9c3448fdeb4cd998d3e27be2e34e1f1671424d47f89c13b438757172fcacc8f24133b6c184d&scene=0&xtrack=1&sharer_openid=oD-X9wbS9SNIgdo-cU1KSgaVDLMI&sharer_sharetime=1594086081&srcid=0707h1zc3CJh0Tj1ZTI6lWfP&appmsg_type=9&comment_topic_id=1416925302537945088&vid=wxv_1416892460432982017&key=526e2243123993b78029305c42b4fc3cb7bc97e2338c49a67adcea6480bbdc71d262a875338cc7fe7c37dcd20b8bc80460b3d1c6be3bcc3adf4fe80133fb958a048f9654e7f33fdf1973a2d0ed1aec5e&ascene=1&uin=Mjc1MjQ2NjIzMw%3D%3D&devicetype=Windows+10+x64&version=62090529&lang=zh_CN&exportkey=A8ExT4eBkJOMUoxxBJpyXgE%3D&pass_ticket=klCLGZHEFBWZf22NYbYJM5EP5u96wC4NwlHYdGKbqnnHfpvPcIMolOiwPPQLROEe