Spring5源码精讲(一):5.0.x源码环境构建

1、前言

    自从spring5使用gradle构建之后,对于大部分maven党来说,搭建源码环境简直就是噩梦。网上的教程也有着各种各样的坑,因此在这里特意花时间整理了一下自己基于IDEA构建spring5源码环境,让广大群众能够不踩坑。

2、作案工具

构建源码环境之前先说明一下工具版本,尽量保持一致能够避免踩坑:

  1. gradle 4.9
  2. jdk1.8
  3. IDEA 2020.1
  4. spring 5.0.x

什么?你问我gradle怎么安装?自己去百度

3、源码下载

gayhub上面官方提供的源码下载实在有够慢,如果你会科学上网当我没说,要不然还是老老实实去码云上面体验极速下载:

https://gitee.com/mirrors/Spring-Framework

直接通过ssh clone下来后,我们接下来就可以通过IDEA来构建我们的源码环境了。

4、构建环境

使用IDEA打开Spring-Framework,首先第一件事就是把它自动构建的框框给取消了,因为我们还要改蛮多配置,现在不需要它帮我们构建。

点了取消之后会提示我们取消构建:


4.1 切换分支

取消构建之后,很重要的一件事情是,记得切换分支!!

在IDEA右下角切换成5.0.x版本。(什么?你说你不知道怎么切换?出门左转,百度一下)


4.2 修改配置

接下来就是做一些我们自己的配置。

首先要把的gradle目录->wrapper目录下的gradle-wrapper.properties文件里,distributionUrl配置改成我们本地的,这样就不会每次打开都脑瘫的去下载官方指定的版本。

distributionUrl=file:///F:/mydownload/gradle-4.9-bin.zip

然后我们在根目录的build.gradle文件里(相当于maven的pom文件)找到150行左右的位置,将原来的repositories修改成如下配置:

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

此外,spring-beans模块下的spring-beans.gradle里,记得要将该行代码注释掉,否则会报No such property: values for class: org.gradle.api.internal.tasks.DefaultTaskDependencies错误

compileGroovy.dependsOn = compileGroovy.taskDependencies.values - "compileJava"


4.3 开始构建

完成上述工作之后,点击右上角刷新gradle的图标,开始重新构建,这时候会给你下载一大堆东西,慢慢等着就好了,如果超时了再重试就行:

等构建完成后,我们点开org.springframework.context.ApplicationContext类,按下Ctrl+Alt+U键,如果出现下图所示类图界面说明构建成功,构建过程就是找依赖对象的过程。


5、源码编译

源码构建已经完成,但是我们需要在源码的基础上面进行修改,开发,调试,添加注释等等操作,所以需要将源码进行编译打包,下面就是将源码编译的过程。

5.1 spring-oxm模块编译

根据文档要求先编译spring-oxm下的compileTestjava,点击右上角gradle打开编译视图,找到springoxm模块,然后在Task -> other下找到compileTestjava。

双击之后稍等一会儿你会发现报错了:

Circular dependency between the following tasks:
:spring-beans:compileGroovy
\--- :spring-beans:compileJava
     \--- :spring-beans:compileKotlin
          \--- :spring-beans:compileGroovy (*)

这时候我们需要再次修改一下spring-beans模块下的spring-beans.gradle文件,没错,就是我们之前注释掉一行的文件,把最后三行(包括你之前注释掉的那一行)替换成如下:

def deps = compileGroovy.taskDependencies.immutableValues + compileGroovy.taskDependencies.mutableValues
compileGroovy.dependsOn = deps - "compileJava"
compileKotlin.dependsOn(compileGroovy)
compileKotlin.classpath += files(compileGroovy.destinationDir)

    再次双击,编译完成。

5.2 spring-core模块编译

因为之后的spring-context依赖于core,我们需要把spring-core也编译一下,这次编译就容易多了,没有那么多的坑,直接双击完成。

5.3 编译整个工程

完成上述两个步骤之后,我们接着开始编译整个工程。

双击build之后,默默等待IDEA帮你编译完就好了。过程有点漫长,慢慢等待吧。公司电脑跑了40分钟后,终于跑完了。。。

至此源码是编译完成了,那么接下来,我们要加一个自己的模块用来测试一下,花了这么久时间构建的源码能不能用。

6、源码测试

首先我们新增一个自己的模块,名字自己随意起。注意,这里New -> Module选择的是gradle,可不要反手就选择了maven。

finish之后,IDEA会自动帮我们构建自己的模块,然后打开全局配置文件:settings.gradle文件,在最下面我们可以看到自己添加的模块:

然后我们在自己的默认模块打开build.gradle文件,默认dependencies依赖(这里的dependencies和maven里的依赖是一样的)只有一个junit,我们需要手工添加spring-context这个核心模块

dependencies {
    //添加完要构建一下,否则代码中无法引用
    compile(project(":spring-context"))
    testCompile group: 'junit', name: 'junit', version: '4.12'
    // lombok依赖
    annotationProcessor 'org.projectlombok:lombok:1.18.2'
    compileOnly 'org.projectlombok:lombok:1.18.2'
    testAnnotationProcessor 'org.projectlombok:lombok:1.18.2'
    testCompileOnly 'org.projectlombok:lombok:1.18.2'
}

添加完之后刷新一下,接下来我们就可以在自己的模块下编写代码来测试一下能不能用了。

6.1 功能测试

接下来我们在自己创建的模块上面添加一些代码:

这里我们使用注解的形式简单测试,代码如下:

BeanConfig.class:

@Configuration
@ComponentScan
public class BeanConfig {

	@Bean
	public User user(){
		return new User(1,"hello,spring");
	}

}

User.class

@Data
@ToString
@AllArgsConstructor
public class User {

	private Integer id;

	private String username;

}

Main.class

public class Main {

	public static void main(String[] args) {
		AnnotationConfigApplicationContext context = new
				AnnotationConfigApplicationContext(BeanConfig.class);
		User user = (User)context.getBean("user");
		System.out.println(user.toString());

	}

}


6.2 BUILD FAILED

点击运行,然后你会发现,控制台并没有按你想象中的见证奇迹,而是给你报了个BUILD FAILED。
有问题我们就得看日志,控制台往上面翻,你会发现报错如下:

很明显,这是在编译的时候发现了警告,但是在某个地方指定了 -Werror参数,将警告当成了错误来处理。打开build.gradle文件,在106行找到我们的罪魁祸首,把这个参数删掉后再次运行:


7、结尾

至此我们的spring5.0.x源码环境已经构建完成,我们可以在这上面进行修改、添加注释并且上传到自己的仓库上,接下来,我们就可以开始我们对spring5的源码探索了!

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值