上次搭建spring源码的环境还是两年前,依稀记得那时候也是一顿折腾,奈何当时没有记录,导致两年后的今天把坑重踩了一遍,还遇到了新的坑,真是欲哭无泪;为了以后类似的事情不再发生,这次写下这篇博文来必坑;

  一、源码下载

  github直接搜索即可.地址已拼好并直接定位到我此次用到的5.2版本:https://github.com/spring-projects/spring-framework/tree/5.2.x,为了后续看源码写注释方便,这里直接下载的zip包

  二、gradle下载

  spring源码用的项目构建工具是gradle而不是maven,这里直接写必坑策略,就不掩饰错误了,据说spring5.2.x版本搭载的gradle版本不能低于5.6不能高于5.7,本人亲测过gradle的3.2,5.1和7.0版本都不构建失败,最后使用5.6.4版本成功构建,关于这块之前也百度过,也瞄到过说更改spring源码中gradle的版本的,由于我没有实际操作,此处略去不管,最后,gradle下载地址:https://services.gradle.org/distributions/ 选择对应-all版本下载即可;下载完成后别忘了配置环境变量

  三 导入idea

1.import project选择解压后的源码目录

2.如图示选择后点击next

3.如图示选择gradle的安装目录,点击finish等待gradle构建项目,此过程较长,我第一次导入大概花了近20分钟

  

  如果按照上面提供的源码和gradle版本导入构建的话大概率不会有什么问题了,万一有其他问题多半是gradle版本的问题了,百度一搬都能解决

  四、新建自己的测试module

  1.选中项目右键new-module,如图

直接next,自定义一下artifactid后一直无脑下一步即可,此时只需等待gradle去构建这个测试模块,构建完后目录齐全,如图:

为方便阅读和debug源码,需要写一个测试类来复现spring容器创建bean的过程,关键代码如下:

/**
* @Author dll
* @create 2021/4/23 15:02
* @describe
*/
public class Test01 { public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("test.xml");
Object aaa = ac.getBean("aaa");
System.out.println(aaa);
} }

xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="aaa" class="com.dll.beans.AAA">
<property name="name" value="董琳琳"></property>
</bean>
</beans>

接下来按道理就能直接能运行main方法了,但是我出现了一个无解的报错:Error:Kotlin: warnings found and -Werror specified;尴尬的是这个报错竟然百度不到,于是猜测是Kotlin版本问题,结果换了版本号还是不行,百度折腾半天灵光一现,将idea从2018.3.3换成2019.2.3,重复上述步骤重新导入构建,直接成功!也不知道是什么原因,也不想去纠结了,哈哈,至此,环境构建完毕,接下来是枯燥的源码阅读之旅,希望能够坚持吧

spring源码解析(一) 环境搭建(各种坑的解决办法)的更多相关文章

  1. Spring源码分析之环境搭建

    写在最前面 最近突然心血来潮,想看看源码,看看大牛都怎么码代码,膜拜下.首选肯定是spring大法,于是说干就干,从GitHub上下载spring-framework源码编译拜读. 环境搭建 安装JD ...

  2. Spring 源码学习之环境搭建

    一.下载Spring 源码 进入 https://github.com/spring-projects/spring-framework/tags 选择下载spring freamework的版本 h ...

  3. Spring源码分析——调试环境搭建(可能是最省事的构建方法)

    1. 依赖工具 idea git jdk 1.8 + Gradle 2. 获取源码 从github https://github.com/spring-projects/spring-framewor ...

  4. Spring源码分析——(001)环境搭建

    1.官方参考 spring-framework的github链接:https://github.com/spring-projects/spring-framework 源码环境搭建官方参考1:考如何 ...

  5. Elasticsearch源码解析:环境搭建

    在之前学习Redis的过程中,我就是一边通过文档/视频学习,一边阅读源码.我发现两种方法可以相辅相成,互相补充.阅读文档可以帮助我们快速了解某个功能,阅读源码有助于我们更深入的理解这一功能的实现及思想 ...

  6. Spring源码解析系列汇总

    相信我,你会收藏这篇文章的 本篇文章是这段时间撸出来的Spring源码解析系列文章的汇总,总共包含以下专题.喜欢的同学可以收藏起来以备不时之需 SpringIOC源码解析(上) 本篇文章搭建了IOC源 ...

  7. Spring源码解析-ioc容器的设计

    Spring源码解析-ioc容器的设计 1 IoC容器系列的设计:BeanFactory和ApplicatioContext 在Spring容器中,主要分为两个主要的容器系列,一个是实现BeanFac ...

  8. Spring源码解析 - AbstractBeanFactory 实现接口与父类分析

    我们先来看类图吧: 除了BeanFactory这一支的接口,AbstractBeanFactory主要实现了AliasRegistry和SingletonBeanRegistry接口. 这边主要提供了 ...

  9. spring 源码解析

    1. [文件] spring源码.txt ~ 15B     下载(167) ? 1 springн┤┬вио╬Ш: 2. [文件] spring源码分析之AOP.txt ~ 15KB     下载( ...

随机推荐

  1. 回溯、贪心、DP的区别和联系

    四大常用算法:分治.贪心.回溯.动态规划 回溯算法是个"万金油".基本上能用跟动态规划.贪心解决的问题,都可以用回溯去解决.回溯算法相当于穷举搜索,穷举所有情况,然后得到最优解.不 ...

  2. Crash的数字表格 (莫比乌斯反演)

    Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b ...

  3. 第七十六篇:ref引用(在vue中引用Dom的方法)

    好家伙, 引子: jQuery简化了程序员操作DOM的过程 vue 优势:MVVM 在vue中,程序员不需要操作DOM.程序员只需要把数据维护好即可!(数据驱动视图) 那么若要在vue中操作dom,这 ...

  4. KingbaseES V8R6集群外部备份案例

    案例说明: 本案例采用sys_backup.sh执行物理备份,备份使用如下逻辑架构:集群采用CentOS 7系统,repo采用kylin V10 Server. 一主一备+外部备份 此场景为主备双机常 ...

  5. KingbaseES 开启事务提交跟踪

    KingbaseESV8R6有个参数 track_commit_timestamp,用来开启跟踪事务提交的时间戳. 配置 编辑kingbase.conf,添加配置如下: track_commit_ti ...

  6. Windows Server体验之安装

    微软在Windows Server家族中有一个新的家族,名字就是Windows Server.这个按半年频道更新的版本目前是1903和Windows 10的命名方式一样.这个产品就是以前的服务器核心安 ...

  7. Kubernetes实践技巧:资源预留

    ubernetes 的节点可以按照节点的资源容量进行调度,默认情况下 Pod 能够使用节点全部可用容量.这样就会造成一个问题,因为节点自己通常运行了不少驱动 OS 和 Kubernetes 的系统守护 ...

  8. Logstash:使用Logstash将电子邮件导入到Elasticsearch

  9. Beats:Beats 入门教程 (二)

  10. 第四章:Django表单

    一.HTML表单概述 Django开发的是动态Web服务,而非单纯提供静态页面.动态服务的本质在于和用户进行互动,接收用户的输入,根据输入的不同,返回不同的内容给用户.返回数据是我们服务器后端做的,而 ...