Spring5源代码研究01:源码导入与环境搭建(完美无错误)
为了阅读分析Spring 5源代码,需要搭建环境将源代码导入到本地。我们使用IntelliJ IDEA作为IDE工具来分析源码。网上有很多教程要么太老,要么没有经过实践验证,要么不完美报一堆错误。 本文以比较新的Spring 5.x为例,详细进行说明,而且build编译结果完美无错误。
1、环境准备
环境 | 版本 | 备注 |
---|---|---|
Java | 1.8.0_241 | Java HotSpot™ 64-Bit Server VM (build 25.241-b07, mixed mode) |
IDE | IntelliJ IDEA 2020.1 旗舰版 | |
Git | 2.27.0(已本地独立安装) | 需要通过Git远程获取代码。本地独立安装了Git,在Idea中设置Git安装的路径 |
Gradle | IntelliJ IDEA 自带 | 因为Spring的源代码使用Gradle管理和构建,因此需要此插件 |
AspectJ | 1.9.5 | 需要单独下载安装(下载安装的过程见文后) |
以上设置(及其他IDEA的设置)具体过程截图可以参考此链接:IntelliJ IDEA 2020 安装后常规配置
https://blog.csdn.net/zyplanke/article/details/105576304
2、获取源代码地址
访问https://github.com/, 在搜索框中输入spring-framework
。如下图
在spring-framework工程中,如下图,右侧获得源代码的git clone的URL地址,拷贝该地址。 该URL为:https://github.com/spring-projects/spring-framework.git
注意:如果Download Zip需要注意左侧的Branch分支,以下载对应的版本。 如果不下载zip,而是直接拷贝URL地址,通过git clone则默认自动下载master主分支。
3、源代码导入IDEA
1、打开IDEA如下图(如果之前已经开了其他工程,则应先通过菜单File→Close Project关闭其他工程),选择“Get from Version Control” 。
然后Version control工具选择Git,在URL地址中粘贴刚才拷贝的URL地址。
2、点击“Clone”按钮,IDEA开始执行git clone,需要漫长的等待(根据网速,约一两个小时),如下图。
如果网络不好而报错(cloning下载过程中经常报RPC failed; curl 18 transfer closed with outstanding read data remaining the remote end hung up unexpectedly early EOF index-pack failed
),则可以反复尝试几次。 根据经验尝试3~5次基本能成功,所以我一般使用这个方法。
另外:(网上提供的方法)如果在Idea配置中指向了本地单独安装的Git软件,则可以在本地单独安装的Git软件中执行:git config --global http.postBuffer 524288000
增加postBuffer大小,然后重启IDEA,据说可以避免上述问题(实际测试,设置后依然包上面的错误。)。
3、Git clone下载完毕后,会自动使用Gradle进行Build(Gradle会自动下载依赖的包,通常又得等个把小时)。最后的结果如下图。BUILD SUCCESSFULL。
4、确认源代码版本,打开gradle.properties文件,可以查看当前Sring源代码的版本。
4、解决错误
上面使用Gradle的build成功并不会将java源代码编译为class文件。
需要通过IDEA菜单“Build → ReBuild Project”编译才能将整个工程编译为class。 但在编译过程中会报错,报错解决过程如下:
4.1 缺少cglib和objenesis等的编译错误
为了避免与第三方class冲突,Spring把最新的cglib和objenesis给重新打包(repack)了,它并没有在源代码里提供这部分代码。需要把相关的jar获得,才能编译spring-core。 不然会报缺相关的类。
**解决办法:**在IDEA界面的最右侧找到Gradle窗口,然后在Tasks→other下面分别双击cglibRepackJar
和objenesisRepackJar
然后会自动下载相关Jar。
**同样类似的:**还可能报java: 程序包org.springframework.oxm.jaxb.test不存在
,则在Gradle窗口中,Tasks→other下面双击genJaxb
下载后在spring-core的lib目录下的jar文件,如下图:
4.2 Kotlin的JVM版本不对
如果报Kotlin: Calls to static methods in Java interfaces are prohibited in JVM target 1.6. Recompile with '-jvm-target 1.8'
,则在Settings → Build, Exexution, Deployment → Compiler → Kotlin Compiler中,修改Target JVM Version。
4.3 AspectJ问题
如果报一下图中错误,因为aspect不是Java标准的关键字,需要使用Ajc。
解决办法:
①先从官网https://www.eclipse.org/aspectj/downloads.php 下载文档版本的jar。
②然后执行“ java -jar aspectj-1.9.5.jar”,进入如下安装界面
③如下界面,确认当前已经存在的Java JRE的路径(通常不用修改)
④如下图,选择AspectJ的安装目标目录(根据实际情况设置)。然后点Install 安装。
⑤然后在IDEA中,Settings → Build, Exexution, Deployment → Compiler → Java Compiler 如下图设置。将Use compiler设置为Ajc,将Path to Ajc compiler设置为AspectJ安装目录下的lib文件夹中的aspectjtools.jar文件,同时,需要勾选Delegate to Javac选项(它能够只编译AspectJ的Facets项目,而其他普通项目还是交由Javac来编译)。
⑥分别对spring.spring-aop.main
和spring.spring-aspects.main
添加Facets属性。在IDEA中“Project Structure…”界面中,选择Facets,点击“+”号,选择AspectJ,再选spring-aop.main
。 添加后自动切换到Modules界面,确认结果。
同样,对于spring.spring-aspects.main
也按以上步骤添加Facets。 两个都添加完毕后结果如下图
5、完美编译无错误
经过以上步骤,再次通过IDEA菜单“Build → ReBuild Project”编译整个工程(两三分钟),在Messages界面中提示:Build completed successfully,没有错误(只是有警告)。
至此编译完毕
而且,查看每个module的build文件下,已经生成了许多class文件。如下图。
Spring5源代码研究01:源码导入与环境搭建(完美无错误)相关推荐
- ffmpeg编译gb28181_RTSP/GB28181协议/海康SDK/Ehome协议视频上云网关EasyCVR视频平台在linux环境下ffmpeg源码单步调试环境搭建...
目前TSINGSEE青犀视频研发的视频上云服务平台EasyCVR已经可集成海康EHome私有协议,并且在前文中我也跟大家讲过EHome协议的配置和调用流程,有兴趣的可以阅读一下:配置及协议介绍.Eho ...
- Mycat源码篇 : 起步,Mycat源码阅读调试环境搭建
在研究mycat源码之前必须先把环境搭建好.这篇文章的目标就是搭建mycat源码调试环境.环境主要包括: git jdk maven eclipse mysql 这里假设你知道上面的知识点.我们搭建的 ...
- build怎么调试 react_React源码下载-本地环境搭建
前几天有小伙伴和我聊天,谈到现在前端面试越来越难,动不动就是xxx原理,有没有看过xx源码之类的问题, 之后就问我应该怎么来学习现在主流框架的源码,于是有了这一篇文章. 说到使用react那很简单 r ...
- EDK2源码下载及环境搭建
一.EDK2源码下载 上一片笔记中已经下载了git工具这里用git工具来下载edk2源码及编译工具 首先从github中将edk文件导入到我们的gittee仓库中再从我们的gitee仓库中下拉到我们的 ...
- 4.2.10 Kafka源码剖析, 阅读环境搭建, broker启动流程, topic创建流程, Producer生产者流程, Consumer消费者流程,
目录 4.1 Kafka源码剖析之源码阅读环境搭建 4.1.1 安装配置Gradle 4.1.2 Scala的安装和配置 4.1.3 Idea配置 4.1.4 源码操作 4.2 Kafka源码剖析之B ...
- Elasticsearch源码解析:环境搭建
在之前学习Redis的过程中,我就是一边通过文档/视频学习,一边阅读源码.我发现两种方法可以相辅相成,互相补充.阅读文档可以帮助我们快速了解某个功能,阅读源码有助于我们更深入的理解这一功能的实现及思想 ...
- 【Android 逆向】Android 进程注入工具开发 ( 总结 | 源码编译 | 逆向环境搭建使用 | 使用进程注入工具进行逆向操作 ) ★★★
文章目录 一.Android 进程注入工具开发系列博客 二.Android 进程注入工具 源码下载编译 三.逆向环境搭建 四.使用注入工具进行逆向操作 1.获取远程进程号 2.注入工具准备 3.注入动 ...
- Swift之源码编译的环境搭建和编译流程
编译环境 版本准备:macOS 10.15.3 Xcode 11.5 brew install cmake njnia Python 2.X Swift 源码地址:Apple/Swift 编译流程 ① ...
- 消息中间件RocketMQ源码解析-- --调试环境搭建
1. 依赖工具 JDK :1.8+ Maven IntelliJ IDEA 2. 源码拉取 从官方仓库 [https://github.com/apache/rocketmq) Fork 出属于自己的 ...
最新文章
- R语言数据结构之数组
- c语言220程序,《C语言程序实例大全》原代码220例
- java用循环语法在窗体中显示文字,如果子窗体在窗体视图中,则访问2003循环当前页面不起作用...
- ionic cordova 常用命令
- JTable 学习一
- ubuntu18.04 server配置静态ip
- 仓库镜像源为清华_conda国内镜像修改(最新版)
- 激活navicat12
- Qt调用Com组件--QT调用COM组件DLL(dumpCPP工具)
- 二部图 欧拉图 哈密顿图 平面图 判定条件
- 使用requests post请求爬取申万一级行业指数行情
- 方差递推公式_常见递推公式(数学)
- 高防服务器的机房硬件防火墙类型和主要功能
- Log4j使用配置总结
- 使用downloadm3u8和ffmpeg下载m3u8格式视频
- Google发布文本内容生成短视频工具:Imagen Video
- 大众点评:开放质疑与阿里竞争
- 每日新闻:未来,电脑像手机一样?
- python读取txt中文乱码
- Android:根据文件大小自动转化为KB, MB, GB