spring源码解析(一) 环境搭建(各种坑的解决办法)
上次搭建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源码解析(一) 环境搭建(各种坑的解决办法)的更多相关文章
- Spring源码分析之环境搭建
写在最前面 最近突然心血来潮,想看看源码,看看大牛都怎么码代码,膜拜下.首选肯定是spring大法,于是说干就干,从GitHub上下载spring-framework源码编译拜读. 环境搭建 安装JD ...
- Spring 源码学习之环境搭建
一.下载Spring 源码 进入 https://github.com/spring-projects/spring-framework/tags 选择下载spring freamework的版本 h ...
- Spring源码分析——调试环境搭建(可能是最省事的构建方法)
1. 依赖工具 idea git jdk 1.8 + Gradle 2. 获取源码 从github https://github.com/spring-projects/spring-framewor ...
- Spring源码分析——(001)环境搭建
1.官方参考 spring-framework的github链接:https://github.com/spring-projects/spring-framework 源码环境搭建官方参考1:考如何 ...
- Elasticsearch源码解析:环境搭建
在之前学习Redis的过程中,我就是一边通过文档/视频学习,一边阅读源码.我发现两种方法可以相辅相成,互相补充.阅读文档可以帮助我们快速了解某个功能,阅读源码有助于我们更深入的理解这一功能的实现及思想 ...
- Spring源码解析系列汇总
相信我,你会收藏这篇文章的 本篇文章是这段时间撸出来的Spring源码解析系列文章的汇总,总共包含以下专题.喜欢的同学可以收藏起来以备不时之需 SpringIOC源码解析(上) 本篇文章搭建了IOC源 ...
- Spring源码解析-ioc容器的设计
Spring源码解析-ioc容器的设计 1 IoC容器系列的设计:BeanFactory和ApplicatioContext 在Spring容器中,主要分为两个主要的容器系列,一个是实现BeanFac ...
- Spring源码解析 - AbstractBeanFactory 实现接口与父类分析
我们先来看类图吧: 除了BeanFactory这一支的接口,AbstractBeanFactory主要实现了AliasRegistry和SingletonBeanRegistry接口. 这边主要提供了 ...
- spring 源码解析
1. [文件] spring源码.txt ~ 15B 下载(167) ? 1 springн┤┬вио╬Ш: 2. [文件] spring源码分析之AOP.txt ~ 15KB 下载( ...
随机推荐
- 【JDBC】学习路径4-分页查询
第一章:什么是分页查询呢? 简而言之,分页数 就是百度搜索引擎中的网页的页数. 分页查询,就是从数据库中提取一部分出来,给用户. 用处:减少服务器负担. 为了方便测试,我们先给数据库添加大量信息. 还 ...
- 如何在Apple Silicon Mac上主动安装Rosetta2
前提是您的电脑搭载了Apple Silicon处理器 command + space(空格),输入"终端",打开. 输入 : softwareupdate --install-ro ...
- Kotlin快速上手
一.Kotlin基础 1.数据类型声明 在Kotlin中要定义一个变量需要使用var关键字 //定义了一个可以修改的Int类型变量 var number = 39 如果要定义一个常量可以使用val关键 ...
- 第三十二篇:vue的响应式原理
好家伙 什么是响应式?比较官方的回答: Vue.js 的核心包括一套"响应式系统". "响应式",是指当数据改变后,Vue 会通知到使用该数据的代码. 例如,视 ...
- Zookeeper及基于Zookeeper的分布式锁总结
1. Zookeeper ZooKeeper 内部存储的数据结构 / +-- node1 +-- node2 | +-- sub_node21 -> "I am sub_node21& ...
- Python数据分析教程(二):Pandas
Pandas导入 Pandas是Python第三方库,提供高性能易用数据类型和分析工具 Pandas基于NumPy实现,常与NumPy和Matplotlib一同使用 两个数据类型:Series, Da ...
- Pod 的生命周期
上图展示了一个 Pod 的完整生命周期过程,其中包含 Init Container.Pod Hook.健康检查 三个主要部分,接下来我们就来分别介绍影响 Pod 生命周期的部分: 首先在介绍 Pod ...
- Elastic App Search 入门
官方文档地址:https://swiftype.com/documentation/app-search/getting-started Elastic App Search 架构图: 它的特点是帮助 ...
- nginx配置文件内容详解
events { # 服务器最大链接数 worker_connections 1024; # 设置一个进程是否同时接受多个网络连接,默认为off multi_accept on; #事件驱动模型,se ...
- k8s中节点级别的日志
容器化应用程序写入到 stdout 和 stderr 中的任何信息,都将被容器引擎重定向到某个地方.例如,Docker 容器引擎将 stdout 和 stderr 这两个输出流重定向到 logging ...