idea 导入spring 源码 踩坑记总结整理

一、spring源码下载

spring-framework下载地址:spring-framework github地址


 

二、idea 导入源码工程

 

三、解决 cglib和objenesis的编译错误

解决问题过程: (《Spring 源码深度解析》中介绍的解决过程和下面的有一点不同,不过最终都是导入jar包

spring-objenesis-repack 和 spring-cglib-repack)

百度云盘链接: https://pan.baidu.com/s/1YVcXmZnKKYisgRk3yZ8tFA 提取码:q561 


这是因为spring在构建中,为了防止冲突,没有引入这两个包,需要自己引入,多数模块都有依赖到这两个包,

如 core (main和test 文件夹中都有):

 

四,解决Aspectj 问题

但是又报了新的错误: 找不到符号: 类 AnnotationBeanConfigurerAspect ,JCacheCacheAspect ,AnnotationAsyncExecutionAspect ,AnnotationCacheAspect ,AnnotationTransactionAspect ,具体如下:

D:\workspace\spring-framework-5.1.x\spring-aspects\src\main\java\org\springframework\context\annotation\aspectj\SpringConfiguredConfiguration.java
Error:(19, 49) java: 找不到符号
  符号:   类 AnnotationBeanConfigurerAspect
  位置: 程序包 org.springframework.beans.factory.aspectj
Error:(47, 16) java: 找不到符号
  符号:   类 AnnotationBeanConfigurerAspect
  位置: 类 org.springframework.context.annotation.aspectj.SpringConfiguredConfiguration
Error:(48, 24) java: 找不到符号
  符号:   变量 AnnotationBeanConfigurerAspect
  位置: 类 org.springframework.context.annotation.aspectj.SpringConfiguredConfiguration
D:\workspace\spring-framework-5.1.x\spring-aspects\src\main\java\org\springframework\cache\aspectj\AspectJJCacheConfiguration.java
Error:(42, 16) java: 找不到符号
  符号:   类 JCacheCacheAspect
  位置: 类 org.springframework.cache.aspectj.AspectJJCacheConfiguration
Error:(43, 17) java: 找不到符号
  符号:   类 JCacheCacheAspect
  位置: 类 org.springframework.cache.aspectj.AspectJJCacheConfiguration
Error:(43, 49) java: 找不到符号
  符号:   变量 JCacheCacheAspect
  位置: 类 org.springframework.cache.aspectj.AspectJJCacheConfiguration
D:\workspace\spring-framework-5.1.x\spring-aspects\src\main\java\org\springframework\scheduling\aspectj\AspectJAsyncConfiguration.java
Error:(43, 16) java: 找不到符号
  符号:   类 AnnotationAsyncExecutionAspect
  位置: 类 org.springframework.scheduling.aspectj.AspectJAsyncConfiguration
Error:(44, 17) java: 找不到符号
  符号:   类 AnnotationAsyncExecutionAspect
  位置: 类 org.springframework.scheduling.aspectj.AspectJAsyncConfiguration
Error:(44, 62) java: 找不到符号
  符号:   变量 AnnotationAsyncExecutionAspect
  位置: 类 org.springframework.scheduling.aspectj.AspectJAsyncConfiguration
D:\workspace\spring-framework-5.1.x\spring-aspects\src\main\java\org\springframework\cache\aspectj\AspectJCachingConfiguration.java
Error:(42, 16) java: 找不到符号
  符号:   类 AnnotationCacheAspect
  位置: 类 org.springframework.cache.aspectj.AspectJCachingConfiguration
Error:(43, 17) java: 找不到符号
  符号:   类 AnnotationCacheAspect
  位置: 类 org.springframework.cache.aspectj.AspectJCachingConfiguration
Error:(43, 53) java: 找不到符号
  符号:   变量 AnnotationCacheAspect
  位置: 类 org.springframework.cache.aspectj.AspectJCachingConfiguration
D:\workspace\spring-framework-5.1.x\spring-aspects\src\main\java\org\springframework\transaction\aspectj\AspectJTransactionManagementConfiguration.java
Error:(42, 16) java: 找不到符号
  符号:   类 AnnotationTransactionAspect
  位置: 类 org.springframework.transaction.aspectj.AspectJTransactionManagementConfiguration
Error:(43, 17) java: 找不到符号
  符号:   类 AnnotationTransactionAspect
  位置: 类 org.springframework.transaction.aspectj.AspectJTransactionManagementConfiguration
Error:(43, 56) java: 找不到符号
  符号:   变量 AnnotationTransactionAspect
  位置: 类 org.springframework.transaction.aspectj.AspectJTransactionManagementConfiguration

问题原因是spring源码的AOP使用了aspectJ ,而java不识别aspectJ
解决过程:
下载AspectJ
https://www.eclipse.org/aspectj/downloads.php


在这里插入图片描述
在这里插入图片描述
安装过程中3个设置我都是默认的 直接next(注意第二步要设置自己已经安装的jdk家目录
在这里插入图片描述
安装第二部,要选择自己的jdk目录,如果jdk是安装板的,这里会自动选择,如果不是安装板的,需要手动选择一下。
在这里插入图片描述
选择aspectj安装目录
在这里插入图片描述
选择install。

为spring-aspect 工程添加Facets属性

File -> Project Structure -> Facets -> 点击 + 按钮 -> AspectJ -> 选择 spring-aop_main -> 点击OK -> 右键spring-aop_main的Kotlin 选择删除,(注意:如果发现idea的Facets点击后,右侧区域没反应,将项目删除,重新解压->导入idea即可)具体过程如下



在这里插入图片描述

最终的样子:


同上面给spring-aop_main添加Facets属性一样 给 spring-aspects_main 也添加Facets属性

五、更改编译器

在这里插入图片描述
再次编译 Build -> Build Project
 

六、spring-oxm 模块下 jaxb包不存在的问题

D:\workspace\spring-framework-5.1.x\spring-oxm\src\test\java\org\springframework\oxm\jaxb\Jaxb2UnmarshallerTests.java
Error:(36, 41) java: 程序包org.springframework.oxm.jaxb.test不存在
Error:(37, 41) java: 程序包org.springframework.oxm.jaxb.test不存在
Error:(65, 17) java: 找不到符号
  符号:   类 Flights
  位置: 类 org.springframework.oxm.jaxb.Jaxb2UnmarshallerTests
Error:(65, 36) java: 找不到符号
  符号:   类 Flights
  位置: 类 org.springframework.oxm.jaxb.Jaxb2UnmarshallerTests
Error:(73, 17) java: 找不到符号
  符号:   类 FlightType
  位置: 类 org.springframework.oxm.jaxb.Jaxb2UnmarshallerTests

依次执行当前模块下的两个命令,最后clean,build  该模块即可

七、Error:(149, 36) java: 找不到符号:方法getResultStream() 位置:

                                                                              接口 javax.persistence.Query

这个问题比较厉害,暴力解决

发现这几个错误,主要在test文件夹中,并不影响我们阅读Spring源码。简单起见,直接将相关测试代码注释掉。。
 

到此 spring 源码下载安装结束,可以开始源码学习了!

 

 

你可能感兴趣的:(idea 导入spring 源码 踩坑记总结整理)