Spring5源码解析-前奏:本地构建Spring5源码
构建环境
- macOS 10.13.6
- JDK1.8
- IntelliJ IDEA 2018.3.6 (Ultimate Edition)
- Spring v5.1.9.RELEASE
- Gradle 5.5.1。直接使用brew安装Gradle
brew install gradle
源码构建
1.源码导入

2.阅读Spring源码下的 import-into-idea.md 文件可知
Precompile
spring-oxmwith./gradlew :spring-oxm:compileTestJava

3.修改 gradle/docs.gradle 脚本
一开始尝试直接构建Spring源码,在构建的过程中会报错,通过修改docs.gradle 脚本,注释 dokka 和 asciidoctor

4.源码构建

等了好长好长的时间,终于构建完成了。

5.在Spring项目中新增一个自己的module,尝试运行hello world,引入spring-context 依赖 compile(project(":spring-context"))

6.运行main方法,发现报错
Error:(160, 32) java: 找不到符号 符号: 变量InstrumentationSavingAgent 位置:

网上搜索了一大堆的解决方法,发现都不行。后来看了spring-context的依赖发现,spring-instrument 在 spring-context 中为 optional 依赖(optional(project(":spring-instrument")) ),于是在自己的模块中添加spring-instrument依赖

再次运行main方法,程序运行成功。
ps:令我感到奇怪的是,当我在写这篇总结时,尝试通过移除spring-instrument依赖来复现上述的问题时,发现复现不了了,好神奇。
Spring5源码解析-前奏:本地构建Spring5源码的更多相关文章
- kubernetes源码解析---- apiserver路由构建解析(1)
kubernetes源码解析---- apiserver路由构建解析(1) apiserver作为k8s集群的唯一入口,内部主要实现了两个功能,一个是请求的路由和处理,简单说就是监听一个端口,把接收到 ...
- kubernetes源码解析---- apiserver路由构建解析(2)
kubernetes源码解析---- apiserver路由构建解析(2) 上文主要对go-restful这个包进行了简单的介绍,下面我们通过阅读代码来理解apiserver路由的详细构建过程. (k ...
- iOS开发之Alamofire源码解析前奏--NSURLSession全家桶
今天博客的主题不是Alamofire, 而是iOS网络编程中经常使用的NSURLSession.如果你想看权威的NSURLSession的东西,那么就得去苹果官方的开发中心去看了,虽然是英文的,但是结 ...
- Ejabberd源码解析前奏--管理
一.ejabberdctl 使用ejabberdctl命令行管理脚本,你可以执行ejabberdctl命令和一些普通的ejabberd命令(后面会详细解说).这意味着你可以在一个本地或远程ejabbe ...
- Ejabberd源码解析前奏--配置
一.基本配置 配置文件将在你第一次启动ejabberd时加载,从该文件中获得的内容将被解析并存储到内部的ejabberd数据库中,以后的配置将从数据库加载,并且任何配置文件里的命令都会被添加到 ...
- Ejabberd源码解析前奏--集群
一.如何工作 一个XMPP域是由一个或多个ejabberd节点伺服的. 这些节点可能运行在通过网络连接的不同机器上. 它们都必须有能力连接到所有其它节点的4369端口, 并且必须有相同的 magic ...
- Ejabberd源码解析前奏--安全
一.防火墙设置 当你配置防火墙的时候,你需要注意以下 TCP 端口: 端口 描述 5222 用于 Jabber/XMPP 客户端连接的标准端口, 纯文本或 STARTTLS. 5223 Jabb ...
- Ejabberd源码解析前奏--概述
一.绪论 Ejabberd是一个用Erlang/OTP写的开源即时通讯服务器,其是跨平台.分布式.容错且基于开放标准的实时通讯系统.Ejabberd是一个功能丰富的XMPP服务器,同时适合小规模 ...
- Ejabberd源码解析前奏--调试
一.日志文件 一个ejabberd节点写两个日志文件: ejabberd.log ejabberd 服务日志, 由 ejabberd 节点汇报的消息erlang.log Erlang/OTP 系 ...
随机推荐
- 牛客多校第二场B discount 基环内向树
题意: 有n种商品,每种商品有一个价格 p[i] . 每种商品都有2种打折方式: 1. 给你优惠 d[i] 元. 2. 免费送你第 f[i] 种饮料. 现在求每种饮料至少一瓶的最小花费. dp[i][ ...
- atcoder E - Jigsaw(思维)
题目链接:http://agc017.contest.atcoder.jp/tasks/agc017_e 题解:这题很巧妙运用了cnt[i]抽象的表示了上下互补的状态,最后上面突出的一定要处理完.下面 ...
- hdu6373 Pinball 杭电第六场 物理知识
Pinball Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total S ...
- CodeForces 980 C Posterized
Posterized 题意:将[0,255] 分成 若干段, 每一段的长度最多为k, 每一个数只能被放进一个段里, 然后每一段的数组都可以被这一段最小的数字表示, 求最小的字典序. 题解:每次一个访问 ...
- extends 关键字
来源于百度: 在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承. 例子1:public class Clie ...
- CSS3 01. CSS3现状、属性选择器、伪类选择器、结构伪类、伪元素选择器、颜色、文本阴影shadow、盒子模型、私有化前缀
CSS 3 现状 兼容性差,需添加私有前缀/移动端优于PC端/不断改进中/渐进增强原则/考虑用户群体/遵照产品的方案 : CSS3手册 需要阅读其--阅读及使用指引 []表示全部的可选项 || 或者 ...
- 为什么spark中只有ALS
WRMF is like the classic rock of implicit matrix factorization. It may not be the trendiest, but it ...
- map + filter + reduce
map 是对 集合 里面的元素一个接一个的进行某种运算,常常与lambda 结合使用 #求平方: items = [1, 2, 3, 4, 5] squared = list(map(lambda ...
- Mybatis系列(三)XML
Mybatis系列(三)XML 1.pom.xml依赖: <?xml version="1.0" encoding="UTF-8"?> <pr ...
- 小白学习VUE第一篇文章---如何看懂网上搜索到的VUE代码或文章---使用VUE的三种模式:
小白学习VUE第一篇文章---如何看懂网上搜索到的VUE代码或文章---使用VUE的三种模式: 直接引用VUE; 将vue.js下载到本地后本目录下使用; 安装Node环境下使用; ant-desig ...