文章目录

  • 1. 环境准备
  • 2. Spring 环境配置
  • 3. 调试源码

1. 环境准备

  • spring-framework 5.2.2.RELEASE:https://github.com/spring-projects/spring-framework
  • gradle-5.6.4:参考这篇文章下载安装Gradle,版本换成5.6.4即可:https://blog.csdn.net/qq_28834355/article/details/109165291
  • IDEA

2. Spring 环境配置

  • 在 gradle 目录 init.d 底下新建文件 init.gradle,把下面的内容复制进去
   allprojects{repositories {def REPOSITORY_URL = 'https://maven.aliyun.com/nexus/content/groups/public/'all { ArtifactRepository repo ->def url = repo.url.toString()if ((repo instanceof MavenArtifactRepository) && (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com'))) {project.logger.lifecycle 'Repository ${repo.url} replaced by $REPOSITORY_URL .'remove repo}}maven {url REPOSITORY_URL}}
}
  • 解压上一步下载的 spring 源码压缩包,进入根目录
  • 找到 settings.gradle,修改 repositories 如下
pluginManagement {repositories {gradlePluginPortal()maven { url 'https://maven.aliyun.com/repository/public' }maven { url 'https://repo.spring.io/plugins-release' }}
}
  • 找到 gradle.properties,修改内容如下:
version=5.2.2.RELEASE
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.caching=true
org.gradle.parallel=true
  • 找到 build.gradle,修改 buildscript.repositories 内容如下。底下还有一个 repositories ,也改成一样的。
buildscript {repositories {maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}mavenCentral()jcenter()google()maven { url "https://repo.spring.io/libs-spring-framework-build" }}dependencies {classpath 'org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.16'classpath 'io.spring.asciidoctor:spring-asciidoctor-extensions:0.1.3.RELEASE'}
}
  • 进入 spring-framework\gradle\wrapper 目录,将前面下载的 gradle-5.6.4-bin.zip 复制过来。并修改文件 gradle-wrapper.properties,内容如下:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=gradle-5.6.4-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
  • 回到 spring 根目录下,执行如下命令
gradle :spring-oxm:compileTestJava
  • 等待编译完毕即可,成功之后会出现 BUILD SUCCESSFUL

注意:spring和gradle的版本是有对应关系的,如果报错提示build_scan_plugin版本问题,一般是gradle版本跟spring版本不符。根据报错信息,参考这里重新下载:https://docs.gradle.com/enterprise/compatibility/#build_scan_plugin

3. 调试源码

IDEA打开spring-framework,新建一个我们自己的测试模块。File -> New Module 选择Gradle项目,勾选Web。

修改 build.gradle,添加 spring-context 依赖:

随后,写一个简单的main程序启动试试:

我这边一开始启动是报错的,有以下2个问题:

报错1:

Error:(354, 51) java: 找不到符号
符号: 变量 CoroutinesUtils
位置: 类 org.springframework.core.ReactiveAdapterRegistry.CoroutinesRegistrar

解决方法:

File -> Project Structure -> Libraries -> + > Java,然后选择spring-framework/spring-core/kotlin-coroutines/build/libs/kotlin-coroutines-5.2.2.RELEASE.jar,在弹出的对话框中选择 spring.spring-core.main

然后重新编译。

报错2:

Error:(26, 38) java: 找不到符号
符号: 类 InstrumentationSavingAgent
位置: 程序包 org.springframework.instrument

解决方法:

在刚刚新建的模块下,添加依赖 spring-instrument ,如下:


重新执行main方法,启动成功啦

调试Spring源码 5.2.2.RELEASE相关推荐

  1. 想读Spring源码?先从这篇「 极简教程」开始

    来自:Java中文社群 为什么要阅读源码?这是一个有趣的问题,类似的问题还有,为什么要看书?为什么要爬山? 这也是一个哲学问题,我想每个人都有不同的答案,下面我是对阅读源码好处的一些思考.(PS:也欢 ...

  2. spring源码深度解析—Spring的整体架构和环境搭建

    概述 Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.Spring是于2003 年兴起的一个轻量级的Java 开发框 ...

  3. 想读Spring源码?先从这篇「 极简教程」开始吧...

    为什么要阅读源码?这是一个有趣的问题,类似的问题还有,为什么要看书?为什么要爬山? 这也是一个哲学问题,我想每个人都有不同的答案,下面我是对阅读源码好处的一些思考. (PS:也欢迎你在评论区留言补充) ...

  4. idea调试源代码c语言,IDEA阅读spring源码并调试

    目标:搭建起Spring源码阅读和代码调试跟踪的环境,顺便建立一个简单的Demo,能够调试Spring的源代码 本节,主要介绍一下Spring源码阅读和调试的相关环境搭建,并使用MVN创建一个非常简单 ...

  5. Spring源码系列(十三)——Spring源码编译及详细注解

    文章目录 1. 环境搭建 2. 代码编译 2.1 编译代码 2.1.1 build.gradle 2.1.1.1 第一处 2.1.1.2 第二处 2.1.2 gradle.properties 2.1 ...

  6. Spring源码深度解析(郝佳)-学习-Spring Boot体系原理

      Spring Boot是由Pivotal团队提供的全新框架,其设计目的用来简化新Spring应用初始化搭建以及开发过程,该框架使用了我写的方式进行配置,从而开发人员不再需要定义样板化的配置,通过这 ...

  7. JAVA-下载并运行Spring源码,超细节,包成功!

    我们看spring源码有两种方式.一,可以在项目中引入spring依赖,进行静态调试.二是下载源码进行调试.博主认为将源码下载下来,写自己的注释快乐滴研究spring的奥秘是一个很棒的主意. 使用工具 ...

  8. Spring源码分析篇(一)之Gradle环境搭建

    Gradle的简介我就不在此多废话了,我们直接上步骤 本人的操作环境是mac jdk1.8+spring5.x版本 编译工具:IDEA IntelliJ 一.熟悉你需要的spring源码包 这个源码包 ...

  9. spring 源码 找不到 taskprovider_一步一步构建Spring5源码

    点关注,不迷路:持续更新Java相关技术及资讯!!! 构建环境 macOS 10.13.6 JDK1.8 IntelliJ IDEA 2018.3.6 (Ultimate Edition) Sprin ...

最新文章

  1. 推荐一款神级 API 接口管理神器
  2. Fitnesse测试系列--如何设置SetUp文件
  3. 软件工程-GoldPoint游戏
  4. 框架 go_go异步任务框架machinery,嗖嗖的[视频]
  5. oracle和mysql的安装教程_客户端安装和配置(1) - Oracle 10g 安装图解教程_数据库技术_Linux公社-Linux系统门户网站...
  6. 1043 输出PATest(PAT乙级 C++)
  7. sql intersect mysql_SQL INTERSECT子句
  8. Spring Boot实战:数据库操作
  9. 域控 只能访问特定网址_开发人员需要了解的特定于域的语言
  10. 暴风集团冯鑫被批捕:涉嫌对非国家工作人员行贿罪、职务侵占罪
  11. [LeetCode]Number of 1 Bits
  12. 第四届中国软件工程大会征文通知
  13. 分布式文件系统FastDFS看这一篇就够了(文件上传下载、单机部署及集群部署)
  14. Android 设计模式:(一)策略模式 —— 封装行为的大局观
  15. 转 VSS 2005 使用详解
  16. 抖音火爆表白小程序(C#语言实现)
  17. 车牌检测License Plate Detection and Recognition in Unconstrained Scenarios
  18. 51单片机Proteus仿真+Keil工程-实验5-单片机串行口中断实验
  19. 企业服务总线Enterprise service bus介绍
  20. 乐学python_铁乐学Python_day09_函数

热门文章

  1. Oracle数据库查看用户状态
  2. 国际货运快递操作流程
  3. SAP Business One
  4. 外包物料成本核算时的供应商确定
  5. 从Q4财报,看有道如何实现从在线教育“迷途”中脱身?
  6. 突破冰箱局限!海尔智家AWE发布美食物联生态平台
  7. php 文章搜索,登录 - 文章搜索 - phpStudy - phpStudy
  8. 编写函数,可以接收任意多个整数并输出其中的最大值和所有整数之和。
  9. vue 事件调用 传参_对vue下点击事件传参和不传参的区别详解
  10. java 转换成时间戳_Java 实例 – 时间戳转换成时间 - Java 基础教程