IDEA导入Spring源码

一,环境准备

    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) 下载完成后解压

        

         IDEA导入Spring源码_第1张图片

    2,下载gradle工具包

        (1) 直接复制上面路径到链接框直接下载

         

        (2) 解压安装包到制定路径

          IDEA导入Spring源码_第2张图片

        (3) 配置gradle环境变量

            将gradle解压路径添加到Path变量 : Path : D:\Program Files\gradle-4.6\bin

             IDEA导入Spring源码_第3张图片

            IDEA导入Spring源码_第4张图片

            使用gradle -v 进行环境变量检验

               IDEA导入Spring源码_第5张图片

    3,打开IDEA,直接open该项目

          IDEA导入Spring源码_第6张图片

          IDEA导入Spring源码_第7张图片

          IDEA导入Spring源码_第8张图片

    4,配置本地gradle

IDEA导入Spring源码_第9张图片

    5,走到这一步需要注意两个异常

        (1) Error:Connection timed out: connect. If you are behind an HTTP proxy, please configure the

            proxy  国外服务器可能存在不稳定,链接超时,这时候需要刷新gradle

        IDEA导入Spring源码_第10张图片

    (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安装完成依赖包后,对整个工程进行重新构建

        IDEA导入Spring源码_第11张图片

    7,jar包引入

        (1) 走到这里后,如果不出意外,构建会报错,两个jar包找不到

          IDEA导入Spring源码_第12张图片

             这是因为spring在构建中,为了防止冲突,没有引入这两个包,需要自己引入

             报错的位置在spring-core模块下

        IDEA导入Spring源码_第13张图片

        IDEA导入Spring源码_第14张图片

        将变红的jar包删除

    IDEA导入Spring源码_第15张图片

        添加新的jar包

    IDEA导入Spring源码_第16张图片

         第二个包同理引入

    (2) 若没有spring-cglib-repack-3.2.7.jar和spring-objenesis-repack-2.6.jar这两个jar包

      在源码解压的目录(E:\spring-framework-5.0.x)下执行cmd命令
  gradle objenesisRepackJargradle cglibRepackJar

      IDEA导入Spring源码_第17张图片
      会在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
IDEA导入Spring源码_第18张图片
安装AspectJ

直接双击执行aspectj-1.9.4.jar
安装过程中3个设置我都是默认的 直接next(注意第二步要设置自己已经安装的jdk家目录)
IDEA导入Spring源码_第19张图片

IDEA导入Spring源码_第20张图片

IDEA导入Spring源码_第21张图片
为spring-aspect 工程添加Facets属性

File -> Project Structure -> Facets -> 点击 + 按钮 -> AspectJ -> 选择 spring-aop_main -> 点击OK -> 右键spring-aop_main的Kotlin 选择删除,具体过程如下
IDEA导入Spring源码_第22张图片

IDEA导入Spring源码_第23张图片

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


9、更改编译器

IDEA导入Spring源码_第24张图片

    选择 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

 

你可能感兴趣的:(IDEA导入Spring源码)