一,环境准备
1,Spring源码包
下载地址:https://github.com/spring-projects/spring-framework
2,gradle工具
下载地址:http://downloads.gradle.org/distributions/gradle-4.6-bin.zip
3,IDEA工具
二,搭建流程
1,下载Spring源码包
(1) 下载完成后解压
2,下载gradle工具包
(1) 直接复制上面路径到链接框直接下载
(2) 解压安装包到制定路径
(3) 配置gradle环境变量
将gradle解压路径添加到Path变量 : Path : D:\Program Files\gradle-4.6\bin
使用gradle -v 进行环境变量检验
3,打开IDEA,直接open该项目
4,配置本地gradle
5,走到这一步需要注意两个异常
(1) Error:Connection timed out: connect. If you are behind an HTTP proxy, please configure the
proxy 国外服务器可能存在不稳定,链接超时,这时候需要刷新gradle
(2) Unable to make the module: related gradle configuration was not found. Please, re-import
the Gradle 没有找到gradle配置,第五六步,查看gradle配置是否正常,然后刷新gradle
(3) 这一步可能会出现报错:
Error:(30, 0) No such property: values for class: org.gradle.api.internal.tasks.DefaultTaskDependency
Possible solutions: values
Open File(spring-beans\spring-beans.gradle )
点击:Open File 然后注释掉如下代码:
//compileGroovy.dependsOn = compileGroovy.taskDependencies.values - ‘compileJava’
最后刷新gradle
6, gradle安装完成依赖包后,对整个工程进行重新构建
7,jar包引入
(1) 走到这里后,如果不出意外,构建会报错,两个jar包找不到
这是因为spring在构建中,为了防止冲突,没有引入这两个包,需要自己引入
报错的位置在spring-core模块下
将变红的jar包删除
添加新的jar包
第二个包同理引入
(2) 若没有spring-cglib-repack-3.2.7.jar和spring-objenesis-repack-2.6.jar这两个jar包
在源码解压的目录(E:\spring-framework-5.0.x)下执行cmd命令 gradle objenesisRepackJar
和gradle cglibRepackJar
,
会在E:\spring-framework-5.0.x\spring-core\build\libs 目录下生成jar包。
8,引入完成后,重新构建 build --> build project
(1)又报了新的错误: 找不到符号: 类 AnnotationBeanConfigurerAspect ,JCacheCacheAspect ,AnnotationAsyncExecutionAspect ,AnnotationCacheAspect ,AnnotationTransactionAspect ,具体如下:
E:\spring-framework-5.0.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
E:\spring-framework-5.0.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
E:\spring-framework-5.0.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
E:\spring-framework-5.0.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
E:\spring-framework-5.0.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
问题原因是使用了aspectJ ,而java不识别aspectJ
下载安装AspectJ
(2)解决过程:
下载AspectJ
注:确保下载前安装了jdk
https://www.eclipse.org/aspectj/downloads.php
安装AspectJ
直接双击执行aspectj-1.9.4.jar
安装过程中3个设置我都是默认的 直接next(注意第二步要设置自己已经安装的jdk家目录)
File -> Project Structure -> Facets -> 点击 + 按钮 -> AspectJ -> 选择 spring-aop_main -> 点击OK -> 右键spring-aop_main的Kotlin 选择删除,具体过程如下
同上面给spring-aop_main添加Facets属性一样 给 spring-aspects_main 也添加Facets属性
9、更改编译器
选择 Delegate to Javac ,作用是 只编译AspectJ的Facets
10 再次编译 Build -> Build Project
还是在报错,这时报错的都是 \src\test\ 下面的代码,将这下面的代码都注释掉重新Build Project
这一路犹如西天取源码!!!功夫不负有心人最终取得源码!!!
参考资料:
https://blog.csdn.net/u011976388/article/details/80356808
https://www.liangzl.com/get-article-detail-126631.html
https://blog.csdn.net/a704397849/article/details/102754505