Skip to content

Spring

Tip

项目环境:git 2.45.2spring-framework 5.3.xgradle 7.5.1jdk11

源码环境搭建

下载 Spring 源码

下载 Spring 5.3.x 版本的源码压缩包 spring-framework at 5.3.x

由于某些原因,可能有的小伙伴下载起来会非常的慢!所以,可以先将项目从 Github 中导入到 Gitee 中,然后直接从 Gitee 中下载,此时会发现下载速度非常快!🚀🚀🚀

Gradle 安装与配置

  1. 下载 Gradle:Gradle 版本该如何选择呢?查看 spring-framework ➡️ gradle ➡️ wrapper ➡️ gradle-wrapper.properties 文件。

    properties
    distributionBase=GRADLE_USER_HOME
    distributionPath=wrapper/dists
    distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
    distributionUrl=file:///E:/devsoft/gradle-7.5.1-bin.zip
    zipStoreBase=GRADLE_USER_HOME
    zipStorePath=wrapper/dists

    可知,需要下载 7.5.1 版本的 Gradle。咱们进入 Gradle 的下载页面,选择与 Spring 要求的版本下载即可。如本人选择 5.3.x 分支的 spring-framework,那么就需要下载 7.5.1 版本的 Gradle。
    image-20230813021242291

  2. 将下载下来的 Gradle 压缩包放到 spring-framework/gradle/wrapper/gradle-wrapper.properties 文件中指定的位置,这样后续在使用 Gradle 进行构建的时候就不需要再重新下载,可以加快构建速度。然后将该压缩包解压到一个自己喜欢的位置,如本人选择的解压位置为:E:\devsoft\gradle-7.5.1

  3. 配置 Gradle 环境变量

    1. 新建一个名为 GRADLE_HOME 的系统环境变量,值指定 Gradle 的安装目录,即上一步中 Gradle 压缩包的解压位置,如本人就填写 E:\devsoft\gradle-7.5.1
    2. 新建一个名为 GRADLE_USER_HOME 的系统环境变量,该环境变量的作用是用于指定 Gradle 的本地仓库地址,值的话根据自己喜欢来即可,如本人的本地仓库地址为 E:\devsoft\gradle-repository
      image-20240623115434645
    3. GRADLE_HOME 系统环境变量放入 Path 变量下,如下所示:
      image-20240623115709167
  4. 验证 Gradle 是否安装成功,在终端中输入 gradle -v 命令,查看是否输出 Gradle 版本号信息,如下所示:
    image-20240623115940018

  5. 配置阿里云镜像源:由于 Spring 5.x 版本之后使用 Gradle 来构建编译,在编译过程中需要下载一堆的插件和 jar 包,众所周知,下载的资源都是从中央仓库下载,如果不使用国内镜像源来下载的话,速度会非常的慢!所以需要先将镜像源切换到国内的阿里云镜像源阿里云仓库服务

    参考自官方教程 Gradle Initialization Scripts,为了对 所有项目 都生效,可以在如下任意位置创建一个 init.gradle 配置文件:

    • Gradle 用户目录,即环境变量 GRADLE_USER_HOME 目录:GRADLE_USER_HOME/
    • Gradle 用户目录,即环境变量 GRADLE_USER_HOME 目录下的 init.d 目录:GRADLE_USER_HOME/init.d/

    • Gradle 安装目录下的 init.d 目录:GRADLE_HOME/init.d/

    其中 init.gradle 配置文件内容如下所示:

    groovy
    allprojects {
      repositories {
        mavenLocal()
        maven { url "https://maven.aliyun.com/repository/public/" }
        maven { url "https://maven.aliyun.com/repository/gradle-plugin/" }
        maven { url 'https://maven.aliyun.com/repository/central/' }
        mavenCentral()
      }
    	println "${it.name}: Aliyun maven mirror injected"
    }

    打开 spring 源码根目录下的 build.gradlesettings.gradle 文件,使用 Ctrl + F 快捷键找到文件中 repositories 关键字所在的位置,将以下着重突出部分的内容分别复制粘贴到此处,最终效果如下所示:

    groovy
    repositories {
      maven { url "https://maven.aliyun.com/repository/public/" }
      maven { url "https://maven.aliyun.com/repository/gradle-plugin/" }
      maven { url 'https://maven.aliyun.com/repository/central/' }
      maven { url 'https://maven.aliyun.com/repository/spring/' }
      mavenCentral()
      maven { url "https://repo.spring.io/libs-spring-framework-build" }
    }
    groovy
    pluginManagement {
    	repositories {
    		maven { url 'https://maven.aliyun.com/repository/public/' }
    		maven { url 'https://maven.aliyun.com/repository/gradle-plugin/' }
    		maven { url 'https://maven.aliyun.com/repository/central/' }
    		maven { url 'https://maven.aliyun.com/repository/spring/' }
    		mavenCentral()
    		gradlePluginPortal()
    		maven { url "https://repo.spring.io/release" }
    	}
    }
  6. 打开 IDEA,配置 Gradle 使用本地安装的版本,如下所示:
    image-20240623123751313

源码编译

根据源码根目录下的 import-into-idea.md 文档可知,构建步骤如下:

  1. 首先运行 ./gradlew :spring-oxm:compileTestJava 命令用于预编译 spring-oxm 模块;

    如果在预编译过程中出现如下所示的错误信息:
    image-20240623182907513

    那是因为 isAccessible() 方法过时了,所以需要将此处的方法调用改成 canAccess(null)。如下所示:
    image-20240623183204101

    再次进行编译,等到出现 BUILD SUCCESSFUL 字样就表示已经预编译成功!
    image-20240623183341937

  2. 导入到 IntelliJ (File -> New -> Project from Existing Sources -> Navigate to directory -> Select build.gradle)
    image-20240623183751732

    开始下载依赖并编译,此过程可能需要几分钟,耐心等待...,等出现 BUILD SUCCESSFUL 字样就表示已经编译成功
    image-20240623184346120

    编译成功之后,使用 gradle 测试一下。
    image-20240623184644108

    双击点击执行,发现执行成功!最后会提示 'git' 相关错误,但是不影响使用。
    image-20240623185049923

提交和推送远程仓库

上面关于 git 的错误的意思是当前不是一个 git 仓库。这个好办,咱们直接使用 git init 命令建一个 git 仓库就好,然后再使用 git add . 命令将文件添加到暂存区,最后使用 git commit -m "fix: git command error" 提交到本地仓库,有需要的小伙伴还可以在 Github 或者 Gitee 建立一个远程仓库,然后将代码推送到远程仓库中。

Note

在提交的时候请先查看 .gitignore 文件中是否配置了忽略 target 文件夹,如果配置了的话,请注释掉或者删除掉!如下图所示:
image-20240623185452463

为什么呢?因为不这么做的话,org.springframework.aop.framework.autoproxy.targetorg.springframework.aop.target这两个包下的类就不会被 git 管理,假如有一天你一不小心删除了本地的 spring 源码,想从远程仓库上再克隆下来,此时就会发现有多坑!!!在运行测试方法compileTestJava时报错:说找不到这两个包下的类!

至此,Spring 源码环境搭建就圆满完成啦!🎉🎉🎉

参考资料🎁