Spring5.3.x源码环境构建

Spring5.3.x源码环境构建


参考链接:https://blog.csdn.net/smart_an/article/details/107199151

准备工具

  • git :拉取代码
  • jdk1.8 : 最低版本1.8
  • gradle :
    • 下载地址: https://services.gradle.org/distributions/
    • 博主使用的版本是6.8.3(gradle-6.8.3-all.zip)
    • 至于怎么安装,小伙伴们可以自行百度,有很多。
    • 安装后,可以使用gradle -v查看是否安装成功。
  • idea:最好是高版本的idea,据说低版本会编译不成功。博主用的idea 2021.3

下载源码

码云地址:https://gitee.com/mirrors/Spring-Framework?_from=gitee_search,Fork到自己的仓库。

这里我构建是master分支,Fork到自己的仓库可以创建以master为起点的新的分支。

开始构建

1、打开idea,【open】导入项目。
在这里插入图片描述

2、导入项目后,Ctrl+Alt+S打开【setting】,搜索gradle,修改【Gradle user home】为自己设定的本地仓库(这里类似于指定maven的本地仓库),指定【Build and run using】和【Run test using】为IDEA,设定【Use Gradle from】读取项目中gradle.wrapper.properties文件,指定JDK为1.8。

补充: 这里的配置后续运行可能会存在问题,问题的解决方案更新在最后了,下移至附录2
在这里插入图片描述
3、 修改gradle.wrapper.properties文件。因为gradle每次编译都会从官网下载指定版本(gradle-6.8.3-bin.zip),所以我们在它第一次下载完之后,将distributionUrl设置成本地文件,这样就不会每次编译都从官网下载了。

在这里插入图片描述
4、打开build.gradle文件(这个就相当于是maven的pom文件),在文件头部加上

buildscript {
	repositories {
		maven { url "https://repo.spring.io/plugins-release" }
	}
}

在这里插入图片描述

5、 继续往下,增加阿里云镜像地址:

repositories {
			//新增以下3个阿里云镜像
			maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
			maven { url 'https://maven.aliyun.com/repository/spring/' }
			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" } // Reactor
			//新增spring插件库
			maven { url "https://repo.spring.io/plugins-release" }
}

在这里插入图片描述

6、 修改保存后会自动开始构建。(注意:这里只是把依赖包下载下来,其实还没有真正开始编译),构建完成后,可以找到ApplicationContext类,在类名上使用快捷键Ctrl+Alt+U,如果出现下图,则说明构建成功。

在这里插入图片描述

编译源码

编译之前,可以先阅读一下import-into-idea.md文档。

在这里插入图片描述
发现文档要求我们先编译spring-oxm,执行这个模块的compileTestjava指令。

在这里插入图片描述
编译成功!
在这里插入图片描述

之后,保险起见,同理依次编译一下spring-core和spring-context

在这里插入图片描述
在这里插入图片描述

最后,对整个spring项目进行build,spring->build->build

在这里插入图片描述
构建成功!!!

在这里插入图片描述

源码测试

1、新建一个自己的gradle模块

在这里插入图片描述
----->【next】

在这里插入图片描述
----->【Finish】

2、idea会自动帮我们构建模块。打开全局配置文件:settings.gradle文件,拉到最下面,我们看到系统自动加上了spring-mytest模块。
在这里插入图片描述

3、找到自己模块的build.gradle文件(相当于pom文件),我们需要手工添加spring-context,spring-beans,spring-core,spring-aop这4个核心模块

dependencies {
    //添加完要构建一下,否则代码中无法引用
    compile(project(":spring-context"))
    compile(project(":spring-beans"))
    compile(project(":spring-core"))
    compile(project(":spring-aop"))

在这里插入图片描述
添加完需要构建一下,依赖引入到自己的模块中,如下图
在这里插入图片描述
4、在新建的模块main下,测试代码:

在这里插入图片描述

public class User {

	private Integer id;

	private String name;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public User(Integer id, String name) {
		this.id = id;
		this.name = name;
	}

	public User() {
	}

	@Override
	public String toString() {
		return "User{" +
				"id=" + id +
				", name='" + name + '\'' +
				'}';
	}
}
@Configuration
@ComponentScan
public class JavaConfig {

	@Bean
	public User user(){
		return new User(1,"cheng");
	}
}
public class Main {

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

5、运行测试类:

成功!!! 撒花!!!
在这里插入图片描述

6、 至此,spring源码环境也就搭建完毕了。小伙伴们也就可以进行断点调试了!!!!

附录1:各模块的作用

核心模块:
  • spring-core:依赖注入IOC和DI的最基本实现
  • spring-bean:Bean工厂与装配
  • spring-context:上下文,即IOC容器
  • spring-context-support:对IOC的扩展,以及IOC子容器
  • spring-content-indexer:类管理组件和classpath扫描
  • spring-expression:表达式语句
切面:
  • spring-aop:面向切面编程,CGLIB,JDKProxy
  • spring-aspects:集成AspectJ,AOP应用模块
  • spring-instrument:动态Class Loading模块
数据访问与集成:
  • spring-jdbc:提供JDBC主要实现模块,用于简化JDBC操作
  • spring-tx:spring-jdbc事务管理
  • spring-orm:主要集成Hibernate,jpa,jdo等
  • spring-oxm:将java对象映射成xml数据或将xml映射为java对象
  • spring-jms:发送和接受消息
web组件

spring-web:提供了最基础的web支持,主要建立在核心容器上
spring-webmvc:实现了spring mvc的web应用
spring-websocket:主要与前端页的全双工通讯协议
spring-webflux:一个新的非阻塞函数式Reactive Web框架

测试

spring-test:测试组件

集成兼容

spring-framework-bom:解决不同模块依赖版本不同问题

附录2:搭建项目时遇到的问题:

1、spring-webflux编译不通过、新建的测试模块编译不通过,报代码不规范等错误。

解决方案:
可以将spring-websocket模块下checkstyle.xml文件<moudle>标签内的格式检查都注释掉。
在这里插入图片描述

2、新建的测试模块,引入的依赖构建成功了,但是在代码中引用不到。(rumtimeClasspath下没有依赖)

解决方案:
gradle中点击进行reload。
在这里插入图片描述
3、运行测试类时,保错:
在这里插入图片描述
解决方案:
这个就很神奇,百度了很多,解决方案要不就是升级jdk11,要不就是安装openjdk 1.8。但是我的另一台电脑就是oracle jdk1.8,就不会出现这个问题,所以jdk的关系可以暂时排除了,于是我仔细对比了一下两台电脑项目中的配置最后发现了区别:

在这里插入图片描述
这是正常运行项目的电脑的gradle配置,于是我也按这个修改了,项目就神奇的正常运行了!!!!!

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张矜持

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值