一、前言

  说一说我要写这篇文章的初衷吧,前段时间有小伙伴在微信群求教怎样构建spring源码,他在网上找了n个教程跟着后面花了两天时间都没构建好,正好我最近因工作原因从mac换成windows,开发环境要从零开始搭建和配置,想着也大概有一年多没看过Spring源码了,阅读Spring源码的好处我就不在此啰嗦了,我就借此机会写一篇构建Spring源码的过程,希望能让后面的朋友少走弯路,少踩坑。<br/>   开始之前,先说一下我的电脑是新的,也就是所有开发工具和环境都是最新下载和配置的,另外我没使用梯&子走捷径,也就是说本文的源码构建速度是在正常使用网络情况下,我自己达到的最佳速度,不代表任何人。本文使用到的开发工具及版本说明如下:

  • IntelliJ IDEA 2020.1
  • gradle-6.4.1
  • Spring-framework最新版(5.3.0-SNAPSHOT)

  现在,让我们正式开始Spring源码的构建之旅。

二、Spring源码构建之旅

下载配置Gradle

  这个不是本文的重点又比较简单,你得靠自己先去配置好,如果你实在不会,在文章后面留言,我下次专门给你们写这个教程。

下载Spring源码

1、在github上下载Spring最新版源码,如下图所示: 

2、下载完成以后解压到你自己本地文件夹。 

  我知道因为不可描述原因,大家下载gradle和spring源码可能比较耗时间,所以我把下载好的放在网盘了,需要的可以自己下载: Spring5源码直通车 提取码:srbm

修改配置

  重点来了,下载好源码以后,我们要开始源码构建了,在构建之前,我们先打开spring-framework-master,看我截图的四个文件。下面来一一说明。 

1、import-into-idea.md:这是官方提供的spring源码导入idea的步骤和注意说明,我已经翻译过了,可以移步:IDEA导入Spring源码调试必看

2、修改settings.gradle文件,下载依赖的网络速度之不可描述原因,懂得人都懂,我们加上阿里云的maven仓库。

maven { url "https://maven.aliyun.com/repository/public" }

修改好之后如下图所示:

3、修改gradle.properties文件,我都加了详细注释

version=5.3.0-SNAPSHOT
## 设置此参数主要是编译下载包会占用大量的内存,可能会内存溢出
org.gradle.jvmargs=-Xmx2048M
## 开启 Gradle 缓存
org.gradle.caching=true
## 开启并行编译
org.gradle.parallel=true
## 启用新的孵化模式
org.gradle.configureondemand=true
## 开启守护进程 通过开启守护进程,下一次构建的时候,将会连接这个守护进程进行构建,而不是重新fork一个gradle构建进程
org.gradle.daemon=true

  

修改好之后如下图所示:

4、修改build.gradle文件,加上使用阿里云仓库,提高下载速度。

maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}

  

修改好之后如下图所示:

准备构建

1、再次为了证明我是从零开始的,我把gradle的仓库依赖截图给大家看,gradle的本地仓库依赖位置是C:\Users\admin.gradle\caches\modules-2\files-2.1或者D:\work\tools\gradle\gradle-6.4.1\caches\modules-2\files-2.1,具体位置看你自己的设置。我的仓库现在是空的,没有任何下载好的依赖,截图如下: 

2、预编译spring-oxm,根据import-into-idea.md要求,我们需要先预编译spring-oxm和spring-core,使用命令./gradlew :spring-oxm:compileTestJava,构建速度和截图如下:

3、同上,预编译spring-core,使用命令./gradlew :spring-core:compileTestJava,如下图所示:    

至此,准备工作就完成的差不多了,接下来我们需要导入到IDEA,继续往下看。<br><br><br>

IDEA导入Spring源码

1、下面开始使用idea导入Spring源码,File -> New -> Project from Existing Souces... 

2、选择spring-framework-master项目

3、选择使用gradle编译,点击finish。 

4、可以发现IDEA会自动开始构建编译spring源码。 

5、不要着急,还有最后一步,选择File -> Settings -> Gradle,如下图所示调整: 

6、去给对象问候一声,或者去抽根烟(吸烟有害健康),或者远处眺望一会,稍安勿躁,等回来时发现,不要网上说的一个小时、40分钟、20分钟,只要8m22s就完成Spring源码的构建编译工作,怎么样?还可以吧? 

补充,这是另一个小伙伴按照我的方法后构建速度,9m3s。    

到这儿,使用IDEA+Gradle构建Spring5源码就已经全部完成。

三、验证

  实践是检验真理的唯一标准,那么怎样验证我们上面的构建是否成功呢,很简单,写个demo测试一下就好了,下面进入验证过程。

1、在spring-framework-master项目下新建我们自己的测试module,如下图所示: 

2、选择使用gradle

3、输入自己的module名

4、既然要验证,那我们肯定需要依赖spring的模块,我们在我们刚刚新建的模块下build.gradle文件中修改使用阿里云仓库,同时依赖spring-context模块。

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

修改后如下如所示:

5、刷新依赖,重新编译,速度同样飞快。 

6、我们先写一个配置类

package com.mazhichu.spring.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* @ClassName: MazhichuConfig
* @Description: 配置
* @Author: Moore
* @Date: 2020-06-08 12:30
* @Version: V1.0
*/
@Configuration
@ComponentScan("com.mazhichu")
public class MazhichuConfig {
}

7、写一个实体Bean

package com.mazhichu.spring.repository;

import org.springframework.stereotype.Repository;
/**
* @ClassName: Hello
* @Description: bean
* @Author: Moore
* @Date: 2020-06-08 12:30
* @Version: V1.0
*/
@Repository
public class Hello {
public void hello(){
System.out.println("Hello,ma_zhichu!");
}
}

  

8、编写测试类,运行,如下图所示: 

总结

至此,使用IDEA+Gradle构建Spring5源码并简单调试的教程就到这儿,本文所有内容都来自本人亲自实践,如果对你实实在在有帮助,点赞就是最大的鼓励,如果你在构建过程中遇到任何问题,也欢迎留言告诉我,我看到后会第一时间帮你解答。如果你期待更好的文章,欢迎关注我的公众号“码之初”,谢谢!

使用IDEA+Gradle构建Spring5源码并调试(手把手教程全图解)的更多相关文章

  1. spring源码系列(一):使用Gradle构建spring5源码的一些坑和步骤

    源代码github:  https://github.com/spring-projects/spring-framework.git 一 修改项目配置文件中gradle版本和地址 替换成本地安装的版 ...

  2. Spring5源码解析-前奏:本地构建Spring5源码

    构建环境 macOS 10.13.6 JDK1.8 IntelliJ IDEA 2018.3.6 (Ultimate Edition) Spring v5.1.9.RELEASE Gradle 5.5 ...

  3. gradle 构建spring源码时候报错

    这是使用jdk1.7报的错,我卸载1.7后使用1.8 ,就可以了

  4. gradle 构建包含源码配置

    参考配置: apply plugin: "idea" apply plugin: "groovy" apply plugin: "eclipse&qu ...

  5. Spring5源码阅读环境搭建-gradle构建编译

      前沿:Spring系列生态十分丰富,涉及到各个方面.但是作为Spring生态的核心基础Spring,是最重要的环节,需要理解Spring的设计原理,我们需要解读源码.   在构建Spring源码阅 ...

  6. spring5源码编译过程中必经的坑

    spring源码编译流程:Spring5 源码下载 第 一 步 : https://github.com/spring-projects/spring-framework/archive/v5.0.2 ...

  7. Spring5源码解析-Spring框架中的单例和原型bean

    Spring5源码解析-Spring框架中的单例和原型bean 最近一直有问我单例和原型bean的一些原理性问题,这里就开一篇来说说的 通过Spring中的依赖注入极大方便了我们的开发.在xml通过& ...

  8. Spring5源码解析-论Spring DispatcherServlet的生命周期

    Spring Web框架架构的主要部分是DispatcherServlet.也就是本文中重点介绍的对象. 在本文的第一部分中,我们将看到基于Spring的DispatcherServlet的主要概念: ...

  9. 学习Spring5源码时所遇到的坑

    学习Spring5源码时所遇到的坑 0)本人下载的源码版本是 spring-framework-5.0.2.RELEASE 配置好gradle环境变量之后,cmd进入到spring项目,执行gradl ...

随机推荐

  1. pip命令报错“no perl script found in input”

    windows10,命令行下使用pip命令时报错,python运行成功,且环境变量已经设置,可能是更新了新版本pip所导致 解决方案: 一.使用pip.exe+命令可解决这个问题 二.进行python ...

  2. NO.1 MSP-ESP432P4111开箱

    本人准备2020TI杯模拟电子邀请赛,预计参赛可能会使用TI平台,故从某宝购置一块MSP-ESP432P4111 LaunchPad为参赛做准备.TI官网40美刀,但我只能找国内二道贩子买,有点小贵& ...

  3. [SD心灵鸡汤]000.每月一则 - 索引

    [SD心灵鸡汤]001.每月一则 - 2015.05 [SD心灵鸡汤]002.每月一则 - 2015.06 [SD心灵鸡汤]003.每月一则 - 2015.07 [SD心灵鸡汤]004.每月一则 - ...

  4. Rocket - tilelink - Delayer

    https://mp.weixin.qq.com/s/pc8f_DOJ7w8k8BeM9gPzVw   简单介绍Delayer的实现.   1. 基本介绍   以一定的概率延迟消息的传递.   类参数 ...

  5. Rocket - util - Replacement

    https://mp.weixin.qq.com/s/zCP7wPuxgQ-r94Tr6BV5iw   简单介绍Replacement的实现.   ​​   1. 基本介绍   用于实现Cache替换 ...

  6. Java实现 蓝桥杯 算法提高 八数码(BFS)

    试题 算法提高 八数码 问题描述 RXY八数码 输入格式 输入两个33表格 第一个为目标表格 第二个为检索表格 输出格式 输出步数 样例输入 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 ...

  7. Java实现 LeetCode 748 最短完整词(字母拆分+暴力)

    748. 最短完整词 如果单词列表(words)中的一个单词包含牌照(licensePlate)中所有的字母,那么我们称之为完整词.在所有完整词中,最短的单词我们称之为最短完整词. 单词在匹配牌照中的 ...

  8. Java实现 LeetCode 432 全 O(1) 的数据结构

    432. 全 O(1) 的数据结构 实现一个数据结构支持以下操作: Inc(key) - 插入一个新的值为 1 的 key.或者使一个存在的 key 增加一,保证 key 不为空字符串. Dec(ke ...

  9. Java实现 蓝桥杯VIP 算法提高 分数统计

    算法提高 分数统计 时间限制:1.0s 内存限制:512.0MB 问题描述 2016.4.5已更新此题,此前的程序需要重新提交. 问题描述 给定一个百分制成绩T,将其划分为如下五个等级之一: 9010 ...

  10. Java实现 蓝桥杯 算法提高 最大值路径

    试题 算法提高 最大值路径 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 刷微博,编程序.如下图所示,@北京发布 提出了如下"头脑震荡"问题.对此问题做一般化描 ...