Spring5.0.x源码调试环境搭建

一、实验环境

1.jdk1.8.0_171

2.gradle-5.3.1(Spring源码使用gradle构建的,关于gradle的安装和配置使用,请读者自行上网搜一下,这里不再赘述)

3.IDEA2019.2.4专业版,让如有需要可参考我写的相关的破解文档

4.Spring-5.0.x

二、环境搭建

1.进入到GitHub官网并搜索spirng,找到对应的spring-framework工程,点击链接进入,如下图:

图一

2.切换到自己想要的spring源码版本,如下图:

图二

3.获取Git分支链接(我这里是用idea的git拉取源码,大家也可以把源码下载下来,再用idea导入,视个人习惯而定),如下图:

图三

4.在idea中用git拉取spring源码,(笔者已经拉取过spring5.0.x的源码,这里重新下载5.1.x来做演示,笔者编译的版本还是5.0.x的源码)如下图:

图四

图五

4.1 开始下载源码(需要等几分钟,等待下载完):

图六

4.2 下载完弹出导入窗口,如下:

图七

  1. 导入源码,点击Yes后弹出导入窗口,如下(之前如果配置过gradle,这里不用作修改):

图八

5.1 点击OK后,开始构建(如果是第一次导入,需要下载依赖,可能需要等待一段时间,耐心等待依赖下载完成),如下图:

图九

5.2 导入完成后,如下图所示,可能spring-core项目可能会报错(如果没有报错,自己 重新构建 build --> build project,看有没有报错),这是由于 为了避免第三方class文件的冲突,Spring把最新的cglib和objenesis重新打包后放在了jar包中,并没有放在源码中,从而导致编译错误,需要我们自己导入这两个jar包

图十

图十一

6.解决上面源码中缺失cglib和objenesis的问题,网上给的解决方法是手动下载这两个jar包放到项目中或是自己用jar命令打包,笔者这里用gradle提供的打包工具解决以上问题,如下图(点击下图所示的gradle命令,运行完即可):

图十二

图十三

运行完两个命令后,发现spring-core项目中的build目录中已经存在了这两个jar包:

图十四

7.引入以上连个包后, 重新构建 build --> build project,可能会报如下错误,只是些测试类的错误,不影响源码阅读和调试,把报错的单元测试类删掉即可,想解决的朋友可以自己搜索资料解决。

图十五

图十六

8.解决了以上问题后,再重新编译,又报了以下类找不到的错误,发现这回不是单元测试类的错误,需要解决一下。这个错误提示是找不到AnnotationCacheAspect这个符号,而我们打开项目目录,发现可以找到AnnotationCacheAspect.aj这个文件,打开这个文件,发现是类的声明使用的是aspect而不是class,idea默认使用的编译器是javac,javac编译器肯定是识别不了 public aspect这样的语法的,java是不支持aspect这样的关键字的,aspect这个关键字是AspectJ才能识别的关键字,AspectJ是实现AOP编程的,spring-aspects这个项目和AOP有关,所以就需要用到AspectJ,需要AspectJ的编译器Ajc来对和AOP有关的*.aj文件进行编译。

图十七

8.1 AspectJ最新版下载(下载jar包):

图十八

8.2 AspectJ安装

打开命令行,cd到AspectJ的jar包所在的文件夹,运行java -jar aspectj-1.9.4.jar命令,打开AspectJ的安装界面,直接点击Next,如下图:

图十九

接着选择jre的安装路径,继续Next。

图二十

接着选择AspectJ的安装路径,然后Install安装。

图二十一

安装完成后在idea下配置AspectJ, 只有专业版的IntelliJ IDEA才支持AspectJ的开发,而且idea也提供了官方文档

首先idea安装AspectJ支持插件,下图的两个插件:

图二十二

8.3 为spring-aspect 工程添加Facets属性,步骤如下:

File --> Project Structure --> Facets

图二十三

选择spring-aop.main

图二十四

图二十五

再选择spring-aspects.main

图二十六

图二十七

8.4 更改idea编译器,使idea能够编译*.aj文件,步骤如下:

Settings --> Build, Execution, Deployment -->Compiler -->Java Compiler

将编译器改为 Ajc,接着设置Ajc的安装目录,选择到aspectjtools.jar,同时,一定要将Delegate to Javac选项打钩,这个代理设置的作用是只将上面添加了Facets属性的AspectJ项目用Ajc编译器编译,其他的项目还是用默认的javac编译器编译。如果不勾选这个代理选项,则全部项目都使用Ajc编译器编译,可能会导致编译错误。

图二十八

如果有下图的错误,不要紧,只是idea对*.aj文件的语法要求,对编译项目没有影响。

图二十九

设置完以上步骤后,重新编译,就可以编译成功了,编译成功打印日志如下:

图三十

至此,整个spring-framework5.0.x项目就编译完成了,就可以阅读和跟进调试spring源码了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值