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

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

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

第一天:

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

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

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

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

经过一阵子的等待,源码下载好了,就很开心,很顺利进入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构建的就差不多了。

 

第四天:

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

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

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

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

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

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

WTF ????

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

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

 

第五天:

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

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

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

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

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

第一步:

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

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

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

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

 

第二步:

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

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

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

 

第三步:

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

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

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

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

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

代码测试如下:

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功能。 

 

最后总结说明一下:

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

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

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

 

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

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

 

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

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

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IT贱男

喜欢就,喜欢就,就来打赏一点哟

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

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

打赏作者

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

抵扣说明:

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

余额充值