1. 先去github或码云下载Spring源码,我这里直接fork一份到自己的github,然后从自己的github仓库拉clone

Spring官方代码地址: https://github.com/spring-projects/spring-framework 点右上角的fork
image.png

  1. 到自己的github找到刚才fork好的仓库(相当于直接把spring的官方仓库拷贝一份到自己仓库) , 找到地址,直接clone

    git clone https://github.com/xiayuyuyu/spring-framework.git
    等一段时间(有梯子的会稍快),没装git的自己装一波,课可以选择下载zip包解压

  2. 配置gradle (不赘述)

  3. 进入刚才的spring-framwork文件夹下, gradlew :spring-oxm:compileTestJava 进行编译
  4. IDEA导入源码, File->New->Project From Existing Sources, 选中spring-framework源码文件夹,点击OK,选择Import project from external model,选中Gradle,点击Finish

image.png

  1. 初次导入 慢慢等待编译完成,直到下面的Build看到,我这里是第二次Build所以速度比较快,一般第一次视网速,电脑配置而定,大约要20分钟左右

image.png

  1. 将自己项目与刚才编译好的源码相关联,此处可以采用2中方式
    1. 另外起一个项目,添加spring的依赖,然后更改项目的Project Structure,删除原有从maven仓库里导入的spring包和源码,添加自己刚才编译好的jar包和源码image.png
    2. 就在此项目另外添加一个测试的module,强烈推荐这种方法, 优点: 不用2个项目切来切去! 点击File->New->Module…->Gradle->Java->Next
      image.png
      image.png
      添加好的Module中,需要更改一下build.gradle 来添加依赖 compile(project(“:spring-beans”))
      image.png
  2. 至此环境已经搭建完毕,代码只需要在source-code-test中编写,打的断点就能正常进入

可能遇到的错误

  1. 编译失败

    1. Build file '/Users/leon/Documents/IdeaProjects/github/spring-framework/build.gradle' line: 15
    2. An exception occurred applying plugin request [id: 'com.gradle.build-scan', version: '1.8']
    3. > Failed to apply plugin [id 'com.gradle.build-scan']
    4. > This version of Gradle requires version 2.0.2 of the build scan plugin or later.
    5. Please see https://gradle.com/scans/help/gradle-incompatible-plugin-version for more information.

    原因 gradle版本太高了 plugin1.8 gradle 用4.1-4.10 (如果gradle配置项选的是wrapper file方式,那就需要改gradle-wrapper.properties
    image.png

  2. 自己新建的项目,build.gradle 出现虚线,并且在写测试用例的时候不能引入相关包,image.png
    出现这个问题是因为idea新建module默认的gradle配置文件名为build.gradle,需要手动改为${你的project.name}.gradle 因为官方的build.gradle 有这一行,此处一定要改,不然自己的module不能正确编译 ```groovy rootProject.children.find{ it.name == “buildSrc” }.name = “spring-build-src”

rootProject.name = “spring” rootProject.children.each {project -> project.buildFileName = “${project.name}.gradle” }

  1. 3. 根目录 build.gradle 文件报错,我这里报的是 DependencyResolveDetails 找不到,此处直接把 DependencyResolveDetails 删掉就行
  2. ```groovy
  3. configurations.all {
  4. // Check for updates every build
  5. resolutionStrategy.cacheChangingModulesFor 0, "seconds"
  6. // Consistent slf4j version (e.g. clashes between slf4j versions)
  7. resolutionStrategy.eachDependency { DependencyResolveDetails details ->
  8. if (details.requested.group == "org.slf4j") {
  9. details.useVersion slf4jVersion
  10. }
  11. }
  12. }