目录

  • 1. 项目克隆
  • 2. 下载gradle
  • 3. 更改spring在项目中gradle下载位置
  • 4. 阿里云配置
  • 5. 命令行运行 gradlew.bat
  • 6. 导入idea预编译
  • 7. 正式导入idea(要导好一会儿)
  • 8. 改用idea构建,主要为了提速
  • 9. 新建测试模块
  • 10. 为自己的模块添加spring依赖
  • 11. 创建自己的测试类
  • 总结:
  • 参考:

版本说明:

  • JDK:11
  • Springframework:5.1.X
  • Gradle:6.5.1

1. 项目克隆

# github 版
git clone -b 5.1.x https://github.com/Xudongenen/spring-framework.git
# 国内镜像(本文采用的)
git clone -b 5.1.x https://gitee.com/mirrors/Spring-Framework.git

2. 下载gradle

 https://services.gradle.org/distributions/gradle-6.5.1-bin.zip

3. 更改spring在项目中gradle下载位置

# 改动文件地址 Spring-Framework\gradle\wrapper\gradle-wrapper.properties
# 将其中gradle下载地址改为我们下好的目录,他就会不去下载直接用了,如下图所示:

4. 阿里云配置

修改bulid.gradle文件, 注意加在了哪,可以用“ mavenCentral()”定位一下

repositories {mavenCentral()maven { url "https://repo.spring.io/libs-spring-framework-build" }maven { url "https://repo.spring.io/snapshot" }maven { url 'https://maven.aliyun.com/nexus/content/groups/public/'}maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}}

5. 命令行运行 gradlew.bat

成功的结果如下:

失败结果如下:

我当时是报了如下错误:
错误信息: Could not initialize class org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSetKt
解决方案: 在 Spring-Framework\build.gradle 中修改kotlin版本,共两处:

# 第一处:
plugins {id "io.spring.dependency-management" version "1.0.7.RELEASE" apply falseid "org.jetbrains.kotlin.jvm" version "1.3.61" apply false //这里!!!!id "org.jetbrains.dokka" version "0.9.18"id "org.asciidoctor.convert" version "1.5.8"
}
# 第二处:
kotlinVersion        = "1.3.61"  //这里!!!!

6. 导入idea预编译

# 命令行执行
gradlew :spring-oxm:compileTestJava

成功之后如图:

当然了事情并不是一帆风顺,我出现了以下错误:

错误信息:
org.gradle.api.CircularReferenceException: Circular dependency between the following tasks:
:spring-beans:compileGroovy
— :spring-beans:compileJava
— :spring-beans:compileKotlin
— :spring-beans:compileGroovy (*)**

解决方案: 更改 Spring-Framework\spring-beans\spring-beans.gradle 文件,方法如下:

  1. 在文件最后注释掉下面三行代码
// def deps = compileGroovy.taskDependencies.immutableValues + compileGroovy.taskDependencies.mutableValues
// compileGroovy.dependsOn = deps - "compileJava"
// compileKotlin.dependsOn(compileGroovy)
  1. 添加如下代码
tasks.named('compileGroovy') {// Groovy only needs the declared dependencies (and not the result of Java compilation)classpath = sourceSets.main.compileClasspath
}
tasks.named('compileKotlin') {// Kotlin also depends on the result of Groovy compilationclasspath += files(sourceSets.main.groovy.classesDirectory)
}

7. 正式导入idea(要导好一会儿)

8. 改用idea构建,主要为了提速

9. 新建测试模块

  • 新建模块

  • 选择gradle构建

  • 起名字

10. 为自己的模块添加spring依赖

找到我们自己建的模块中的gradle.bulid

加入如下代码:

compile(project(":spring-context"))

11. 创建自己的测试类

我的文件目录是这样的:

其中涉及到的三个文件如下:

// MyConfig.java 文件
package com.zxd;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("com.zxd")
public class MyConfig {}// MyService.java 文件
package com.zxd;
import org.springframework.stereotype.Component;
@Componentpublic
class MyService {}// MyTest.java 文件
import com.zxd.MyConfig;
import com.zxd.MyService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MyTest {      public static void main(String[] args) {            AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext (MyConfig.class);            System.out.println(annotationConfigApplicationContext.getBean(MyService.class));      }
}

运行MyTest类成功便会得到如下结果:

但事情往往不会那么顺利,我就遇到了以下两个问题:

错误信息1: Kotlin: Language version 1.1 is no longer supported; please, use version 1.2 or greater.
Errors occurred while compiling module ‘spring.spring-beans.main’

解决方案: 我们需要找到对应报错模块,改变他的Kotlin版本,在这里我改成了 1.4 稳定版,遇到类似问题也是同样的解决办法,如图所示。

错误信息2:
D:\java\Spring-Framework\spring-context\src\main\java\org\springframework\context\weaving\DefaultContextLoadTimeWeaver.java:26:38
java: 找不到符号
符号: 类 InstrumentationSavingAgent
位置: 程序包 org.springframework.instrument

解决方案: 通过查看报错信息,我们知道了,编译器没有找到对应的InstrumentationSavingAgent类,我们到这个类所在的模块 spring-instrument 的 out 文件中发现没有这个类,所以我们需要通过手动运行test类将它们编译出来,具体如图所示。

总结:

终于,我们可以运行spring源码了,过程不难,遇到问题不要慌,版本问题一定要细致,如果是第一次装最好先和我的版本保持一致,轻车熟路之后再换呗~
大家如果有啥问题可以留言哦,没问题我们就一起开始学源码了,大家加油啊!!!

参考:

Build from Source

Spring源码剖析(一):编译 spring 源码(2022最新版)相关推荐

  1. Spring Cloud 微服务开发:入门、进阶与源码剖析 —— 11.1 Spring Cloud Alibaba Nacos 概述

    11.1 Spring Cloud Alibaba Nacos 概述 11.1.1 Spring Cloud Alibaba 简介 在一开始,我们先简单介绍下Spring Cloud Alibaba的 ...

  2. Python源码剖析[1] —— 编译Python

    [ 绝对原创,转载请注明出处] 注意 :第一部分Python总体架构采用了网络文档<The Architecture of Python>,这是网络上唯一可见的以剖析Python实现为己任 ...

  3. python源码剖析代码例子_Python源码剖析笔记5-模块机制

    python中经常用到模块,比如import xxx,from xxx import yyy这样子,里面的机制也是需要好好探究一下的,这次主要从黑盒角度来探测模块机制,源码分析点到为止,详尽的源码分析 ...

  4. python源码剖析—— python中的字节码对象初探

    一.代码对象 每个初学python的人都会认为python是一种解释型语言,这个不能说错.但是python并不是真的对执行的python代码的每一行进行解释,虽然我们有一个所谓的"解释器&q ...

  5. stl源码剖析_STL之set源码剖析

    " 源码面前,了无秘密." 之前在 小bug蕴含大能量 中讲过一个和set相关的bug,说过要从红黑树到STL 红黑树,再到STL set的源码逐步掌握整个知识架构. 最近已经把这 ...

  6. 【java集合框架源码剖析系列】java源码剖析之ArrayList

    注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本. 本博客将从源码角度带领大家学习关于ArrayList的知识. 一ArrayList类的定义: public class Arr ...

  7. Java虚拟机(JVM源码):编译OpenJDK源码

    为什么要自己编译JDK源码 作为一个搞技术的同学,如果想在技术这条路上走下去,还是多研究些本质性的东西,修炼下内功.尤其是现在JDK都出到10了,如果你没有研究过,还是停留在之前的时代,那么确实说不过 ...

  8. spring bean加载过程_Spring源码剖析3:Spring IOC容器的加载过程

    本文转自五月的仓颉 https://www.cnblogs.com/xrq730 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https ...

  9. Spring Cloud 微服务开发:入门、进阶与源码剖析 —— 2.2 Spring Cloud Eureka 进阶

    2.2 Spring Cloud Eureka 进阶 上面一节介绍了服务发现以及Eureka的由来,同时展示了Eureka的最基础的搭建以及使用,包括Eureka Server和Eureka Clie ...

  10. Spring IOC源码剖析—整体认知Spring体系结构

    一.来自官网的Spring Spring官网地址:Spring官网 Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架.Spring的轻量级是相对EJB而言,轻量.控制反转.面向 ...

最新文章

  1. nagios监控linux nrpe安装
  2. 平安京服务器维护不能打字,《决战!平安京》:玩的真的累,我真的是服了这破游戏的举报系统...
  3. 01-Introducing the Arm architecture
  4. 信息采集软件测试,Telegraf采集CPU数据,测试派详解
  5. 互联网1分钟 | 0327 华为P30系列发布;微信公号直播工具大范围开放内测资格
  6. Hadoop Yarn生产环境核心配置参数
  7. python自己制作节奏大师游戏_使用pygame制作一个简单的游戏
  8. 计算机中心述职报告诉,计算中心述职报告
  9. css a标签去掉下划线_CSS入门知识汇总
  10. 华为交换机RRPP配置实验
  11. python操纵excel的方法_python操作Excel的几种方式
  12. WPF自定义控件与样式(4)-CheckBox/RadioButton自定义样式
  13. 寻找无向图的关节点(Articulation Points)和判断图是否是双连通图(Biconnect Graph)
  14. 信号量 Linux函数 semget();semctl();semop();
  15. 帆软日期格式转换_FineReport帆软报表相关学习笔记,纪要
  16. 2020 中青杯数学建模思路+代码
  17. gitlab发邮件收不到
  18. 工业无线通信网络步入LTE 时代
  19. offset 和 零点的一点解释
  20. [PTA报错]warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result

热门文章

  1. cache节点、CDN的四大关键技术及CDN服务商类型
  2. 【算法】遗传算法GA中几种交叉算子小结
  3. 万恶的莆田系医院,我也来一发!!!
  4. Linux安装sz和rz
  5. H5 css 京东首页
  6. arcgis字段计算器赋值_关于Arcgis这62个常用技巧,你造吗
  7. Unhandled Rejection (TypeError): Cannot set properties of undefined (setting ‘xxx‘)报错问题
  8. 案例10:设置商业服务网点的高层住宅防火案例分析
  9. L11 通过文件使用磁盘
  10. springboot 大文件分片上传、断点续传和秒传