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

一、spring源码下载

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


 

二、idea 导入源码工程

idea 导入spring 源码 踩坑记总结整理_第1张图片

 

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

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

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

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

idea 导入spring 源码 踩坑记总结整理_第2张图片
这是因为spring在构建中,为了防止冲突,没有引入这两个包,需要自己引入,多数模块都有依赖到这两个包,

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

idea 导入spring 源码 踩坑记总结整理_第3张图片

 

四,解决Aspectj 问题

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


   
   
   
   
  1. D:\ workspace\ spring-framework-5 .1 .x\ spring-aspects\ src\ main\ java\ org\ springframework\ context\ annotation\ aspectj\ SpringConfiguredConfiguration .java
  2. Error :(19, 49) java: 找不到符号
  3. 符号: 类 AnnotationBeanConfigurerAspect
  4. 位置: 程序包 org .springframework .beans .factory .aspectj
  5. Error :(47, 16) java: 找不到符号
  6. 符号: 类 AnnotationBeanConfigurerAspect
  7. 位置: 类 org .springframework .context .annotation .aspectj .SpringConfiguredConfiguration
  8. Error :(48, 24) java: 找不到符号
  9. 符号: 变量 AnnotationBeanConfigurerAspect
  10. 位置: 类 org .springframework .context .annotation .aspectj .SpringConfiguredConfiguration
  11. D:\ workspace\ spring-framework-5 .1 .x\ spring-aspects\ src\ main\ java\ org\ springframework\ cache\ aspectj\ AspectJJCacheConfiguration .java
  12. Error :(42, 16) java: 找不到符号
  13. 符号: 类 JCacheCacheAspect
  14. 位置: 类 org .springframework .cache .aspectj .AspectJJCacheConfiguration
  15. Error :(43, 17) java: 找不到符号
  16. 符号: 类 JCacheCacheAspect
  17. 位置: 类 org .springframework .cache .aspectj .AspectJJCacheConfiguration
  18. Error :(43, 49) java: 找不到符号
  19. 符号: 变量 JCacheCacheAspect
  20. 位置: 类 org .springframework .cache .aspectj .AspectJJCacheConfiguration
  21. D:\ workspace\ spring-framework-5 .1 .x\ spring-aspects\ src\ main\ java\ org\ springframework\ scheduling\ aspectj\ AspectJAsyncConfiguration .java
  22. Error :(43, 16) java: 找不到符号
  23. 符号: 类 AnnotationAsyncExecutionAspect
  24. 位置: 类 org .springframework .scheduling .aspectj .AspectJAsyncConfiguration
  25. Error :(44, 17) java: 找不到符号
  26. 符号: 类 AnnotationAsyncExecutionAspect
  27. 位置: 类 org .springframework .scheduling .aspectj .AspectJAsyncConfiguration
  28. Error :(44, 62) java: 找不到符号
  29. 符号: 变量 AnnotationAsyncExecutionAspect
  30. 位置: 类 org .springframework .scheduling .aspectj .AspectJAsyncConfiguration
  31. D:\ workspace\ spring-framework-5 .1 .x\ spring-aspects\ src\ main\ java\ org\ springframework\ cache\ aspectj\ AspectJCachingConfiguration .java
  32. Error :(42, 16) java: 找不到符号
  33. 符号: 类 AnnotationCacheAspect
  34. 位置: 类 org .springframework .cache .aspectj .AspectJCachingConfiguration
  35. Error :(43, 17) java: 找不到符号
  36. 符号: 类 AnnotationCacheAspect
  37. 位置: 类 org .springframework .cache .aspectj .AspectJCachingConfiguration
  38. Error :(43, 53) java: 找不到符号
  39. 符号: 变量 AnnotationCacheAspect
  40. 位置: 类 org .springframework .cache .aspectj .AspectJCachingConfiguration
  41. D:\ workspace\ spring-framework-5 .1 .x\ spring-aspects\ src\ main\ java\ org\ springframework\ transaction\ aspectj\ AspectJTransactionManagementConfiguration .java
  42. Error :(42, 16) java: 找不到符号
  43. 符号: 类 AnnotationTransactionAspect
  44. 位置: 类 org .springframework .transaction .aspectj .AspectJTransactionManagementConfiguration
  45. Error :(43, 17) java: 找不到符号
  46. 符号: 类 AnnotationTransactionAspect
  47. 位置: 类 org .springframework .transaction .aspectj .AspectJTransactionManagementConfiguration
  48. Error :(43, 56) java: 找不到符号
  49. 符号: 变量 AnnotationTransactionAspect
  50. 位置: 类 org .springframework .transaction .aspectj .AspectJTransactionManagementConfiguration

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


idea 导入spring 源码 踩坑记总结整理_第4张图片
idea 导入spring 源码 踩坑记总结整理_第5张图片
安装过程中3个设置我都是默认的 直接next(注意第二步要设置自己已经安装的jdk家目录
idea 导入spring 源码 踩坑记总结整理_第6张图片
安装第二部,要选择自己的jdk目录,如果jdk是安装板的,这里会自动选择,如果不是安装板的,需要手动选择一下。
idea 导入spring 源码 踩坑记总结整理_第7张图片
选择aspectj安装目录
idea 导入spring 源码 踩坑记总结整理_第8张图片
选择install。

为spring-aspect 工程添加Facets属性

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

idea 导入spring 源码 踩坑记总结整理_第9张图片

idea 导入spring 源码 踩坑记总结整理_第10张图片

最终的样子:

idea 导入spring 源码 踩坑记总结整理_第11张图片
同上面给spring-aop_main添加Facets属性一样 给 spring-aspects_main 也添加Facets属性

五、更改编译器

idea 导入spring 源码 踩坑记总结整理_第12张图片
再次编译 Build -> Build Project
 

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


   
   
   
   
  1. D:\ workspace\ spring-framework-5 .1 .x\ spring-oxm\ src\ test\ java\ org\ springframework\ oxm\ jaxb\ Jaxb2UnmarshallerTests .java
  2. Error :(36, 41) java: 程序包 org .springframework .oxm .jaxb .test不存在
  3. Error :(37, 41) java: 程序包 org .springframework .oxm .jaxb .test不存在
  4. Error :(65, 17) java: 找不到符号
  5. 符号: 类 Flights
  6. 位置: 类 org .springframework .oxm .jaxb .Jaxb2UnmarshallerTests
  7. Error :(65, 36) java: 找不到符号
  8. 符号: 类 Flights
  9. 位置: 类 org .springframework .oxm .jaxb .Jaxb2UnmarshallerTests
  10. Error :(73, 17) java: 找不到符号
  11. 符号: 类 FlightType
  12. 位置: 类 org .springframework .oxm .jaxb .Jaxb2UnmarshallerTests

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

idea 导入spring 源码 踩坑记总结整理_第13张图片

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

                                                                              接口 javax.persistence.Query

这个问题比较厉害,暴力解决
idea 导入spring 源码 踩坑记总结整理_第14张图片
发现这几个错误,主要在test文件夹中,并不影响我们阅读Spring源码。简单起见,直接将相关测试代码注释掉。。
 

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

 

 

你可能感兴趣的:(Spring,idea,spring源码)