欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

编译Spring5.0.x源码之一路坎坷,你经历过绝望吗?

程序员文章站 2022-04-07 19:50:30
...

本文来说说在编译spring-springframework-5.0.x的路上,小编我到底经历了什么? 

如果正在看文章你,恰好也想要研究spring源码,那么请先做好准备再动手,不然迎来的问题如滔滔江水,连绵不绝。

第一天:

先来说说环境:系统:MacOs、开发工具:idea 2017、JDK:1.8

spring源码传送门:https://github.com/spring-projects/spring-framework

第一天小编什么都没准备,直闯源码仓库,找到5.0.x版本,

编译Spring5.0.x源码之一路坎坷,你经历过绝望吗?

小编为了方便,直接使用idea工具,checkout源代码(这里是IDEA 2019 版本的截图)

编译Spring5.0.x源码之一路坎坷,你经历过绝望吗?

经过一阵子的等待,源码下载好了,就很开心,很顺利进入iead。

进入之后idea就在进行编译准备环境,因为spring5.0.x使用了gradle,所以idea自动帮我在下载,以及对应的项目依赖。

这个过程很久很久,加上网速慢,滴滴滴,下班时间到了,下班回家~~~~~

 

第二天:

周六的上午,早起接着编译把,idea控制台就一直再刷刷刷,等啊等,然后就报错了

Cause: org/gradle/api/internal/plugins/DefaultConvention.......

然后就开始找问题,网上有博主说是gradle版本问题,然后就更换了gradle版本,重新编译。

又是很长一阵子的等待..........

又抛出另外一个错误(问题不好重现,忘记什么问题了),心累了,关机~~~

 

第三天:

小编开始吸取教训,先收集一下网络上相关经验,发现绝大都是使用IDEA2018版本以上的,小编就从官方上下载了2018版本的idea。

然后就开始下载,安装、**,一顿操作可以使用了。

现在的环境是:开发工具:idea 2018、JDK:1.8

然后又重新导入spring项目,开始编译中,很开心,这次终于正常编译好了。

如果能进入到这里,spring构建的就差不多了。

编译Spring5.0.x源码之一路坎坷,你经历过绝望吗?

 

第四天:

这就真的好了吗?? 不不不,事情没有辣么简单~~

这一切都是外表,正当小编想要进一步深入了解的时候,控制台错误信息:

错误: 程序包jdk.jfr不存在 import jdk.jfr.Category;

进入源码中查看,源码确实引用了jdk.jfr包里面的内容,一百度,这个jdk1.8不行呀。

然后小编把jdk升级到jdk11了,又开始下载、安装、环境配置

这一下好了,从源码中查看这个包确实引入成功了,但是重新编译的时候,还是继续提示不存在。

WTF ????

从大佬那了解到,如果使用idea2017、2018构建spring源码可能出现问题会更多一点。

然后、然后、然后开始下载idea2019,开始安装,**(这个2019**还花了九牛二虎之力)。

编译Spring5.0.x源码之一路坎坷,你经历过绝望吗?

 

第五天:

现在环境:开发工具:idea 2019、JDK:11

构建个spring源码idea都换了两个版本,心都累了。

经过之前几个问题的处理,小编修改过spring源码的gradle配置文件,也不知道是不是项目导入的方式有问题。

决定把之前的源码删了,直接用zip压缩包的形式下载,进行导入。

这一次编译什么的,都很顺利,然后我们需要进一步的来操作,来保证我们构建的spring源码能够正常运行。

第一步:

找到在idea右侧,选择Gradle,找到spring-core —— Tasks —— other —— complieTestJava

然后双击他,让它运行,为了保证spring真正的构建成功,看看有没有其他问题。

编译Spring5.0.x源码之一路坎坷,你经历过绝望吗?

如果你是个幸运儿,就看到如下提示,万一出了问题,那么恭喜你,还得继续努力。

小编这一步没有遇到什么问题,勉强算通过了吧。

编译Spring5.0.x源码之一路坎坷,你经历过绝望吗?

 

第二步:

编译下spring-context 的源码,刚构建好的spring项目,spring-context是没有编译的,展开这个项目,找到下面的test包,

如图选择所示,然后右键run让它跑一遍,这样就会进行编译,运行后会出来这个out文件夹,里面放在编译后的class文件。

如果你也很顺利的编译完成,那就可以进行写代码进行测试,如果不行把产生的out文件夹删了,重新运行一次,如果还不行,就分析具体问题具体解决把。

编译Spring5.0.x源码之一路坎坷,你经历过绝望吗?

 

第三步:

新建一个模块,进行代码测试。

在跟目录上,右键选择new —— module

编译Spring5.0.x源码之一路坎坷,你经历过绝望吗?

然后选择Gradle项目,下一步,填写相关信息,直接finish就OK了。

编译Spring5.0.x源码之一路坎坷,你经历过绝望吗?

 如果想要在自己新建的项目当中,引用其他项目,那么当然需要修改gradle的配置文件。

以刚刚编译的spring-context为例子,进行引入,等待gradle加载完成,就可以写代码测试了。

编译Spring5.0.x源码之一路坎坷,你经历过绝望吗?

代码测试如下:

编译Spring5.0.x源码之一路坎坷,你经历过绝望吗?

AppConfig.java 


import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.ComponentScan;

/**
 * Created by IntelliJ IDEA.
 *
 * @author IT 贱男
 * description:
 * date: 2020/8/14 09:52
 */
@Configurable
@ComponentScan("org.springframework.display")
public class AppConfig {
}

 User.java 

import org.springframework.stereotype.Component;

/**
 * Created by IntelliJ IDEA.
 *
 * @author IT 贱男
 * description:
 * date: 2020/8/14 09:34
 */
@Component
public class User {

	public String name = "张山";
}

 Test.java  

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.display.config.AppConfig;
import org.springframework.display.model.User;

/**
 * Created by IntelliJ IDEA.
 *
 * @author IT 贱男
 * description:
 * date: 2020/8/14 09:33
 */
public class Test {

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

从运行的结果得知,能够正确使用自己构建的spring项目,来完成一个ioc功能。 

编译Spring5.0.x源码之一路坎坷,你经历过绝望吗?

 

最后总结说明一下:

1、环境:推荐使用 IDEA 2019或者以上的版本、JDK 11

其实在构建spring源码之前,还需要准备安装gradle,但是小编最开始不知道,选择了直接使用idea进行下载项目。目前使用来说还算正常,没遇到奇怪的问题。

2、当整个spring源码构建的差不多了,最好需要按照本文第五天的三个步骤,按顺序走一遍流程,确保能够正常使用。

 

在学习和写代码的日子里,总会遇到奇奇怪怪的问题,耐得住性子,解决就好哈哈哈哈。

不知道你们有没有小编这种类似的经历,可以留言分享一下哟~~~~

 

啊对了,18年小编写过Spring从入门到源码解析,经过2年时间的累积,今年也会陆陆续续更新源码的讲解,比如说一个bean的注入的执行流程,根据源码一步一步分析。

目录传送门:Spring从入门到源码解析——博客学习目录