• spring源码下载安装,导入idea以及编译报错问题详细解决过程


    参考 《spring源码深度解析 第2版》

    一、spring源码下载

    github官网

    github首页搜索 “spring”
    在这里插入图片描述
    选择 spring-projects/spring-framework
    在这里插入图片描述
    点击 Branch master 选择5.0.x
    在这里插入图片描述
    在这里插入图片描述
    下载源码 ZIP压缩包
    Clone or download -> Download ZIP

    如果由于网络问题下载不下来的话,下面是我上传到网盘上的spring5.0.x源码
    网盘下载
    链接:https://pan.baidu.com/s/1S5QCank16oX0Uy1l759EUQ
    提取码:qdjx

    二、idea 导入源码工程

    解压源码后,idea File -> Open 打开源码
    在这里插入图片描述
    Import Project from Gradle 工程属性
    在这里插入图片描述
    导入idea后 如下:
    在这里插入图片描述
    重新编译工程 Build -> Rebuild Project
    在这里插入图片描述
    报错:

    Error:Kotlin: [Internal Error] java.lang.IllegalStateException: The provided plugin org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar is not compatible with this version of compiler
    	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.(KotlinCoreEnvironment.kt:181)
    	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.(KotlinCoreEnvironment.kt:117)
    	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$Companion.createForProduction(KotlinCoreEnvironment.kt:413)
    	at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.createCoreEnvironment(K2JVMCompiler.kt:276)
    	at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:154)
    	at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:63)
    	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:108)
    	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:52)
    	at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:92)
    	at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$$inlined$ifAlive$lambda$1.invoke(CompileServiceImpl.kt:389)
    	at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$$inlined$ifAlive$lambda$1.invoke(CompileServiceImpl.kt:97)
    	at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:909)
    	at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:97)
    	at org.jetbrains.kotlin.daemon.common.DummyProfiler.withMeasure(PerfUtils.kt:137)
    	at org.jetbrains.kotlin.daemon.CompileServiceImpl.checkedCompile(CompileServiceImpl.kt:939)
    	at org.jetbrains.kotlin.daemon.CompileServiceImpl.doCompile(CompileServiceImpl.kt:908)
    	at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:387)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
    	at sun.rmi.transport.Transport$1.run(Transport.java:200)
    	at sun.rmi.transport.Transport$1.run(Transport.java:197)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)
    	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834)
    	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    	at java.lang.Thread.run(Thread.java:748)
    Caused by: java.lang.AbstractMethodError: org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar.registerProjectComponents(Lcom/intellij/mock/MockProject;Lorg/jetbrains/kotlin/config/CompilerConfiguration;)V
    	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.(KotlinCoreEnvironment.kt:179)
    	... 33 more
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    根据报错信息
    The provided plugin org.jetbrains.kotlin.scripting.compiler.plugin.Scripting
    可以知道是 kotlin版本的问题
    在idea 中 File -> Settings -> Plugins 搜索栏输入 Kotlin, 点击Update
    注意:如果没有显示update ,稍等一会应该会出现,如果还不行,那就重启下idea
    在这里插入图片描述

    更新完后 重启idea
    在这里插入图片描述

    再次编译工程 idea 中 Build -> Build Project
    然后发现又报错
    Error:(30, 41) java: 找不到符号: 类 DefaultNamingPolicy ,Objenesis ,InstantiatorStrategy ,ObjectInstantiator ,ObjenesisException
    具体如下:

    E:workspace_ideaspring-framework-5.0.xspring-coresrcmainjavaorgspringframeworkcglibcoreSpringNamingPolicy.java
    Error:(30, 41) java: 找不到符号
      符号: 类 DefaultNamingPolicy
    Error:(34, 9) java: 方法不会覆盖或实现超类型的方法
    E:workspace_ideaspring-framework-5.0.xspring-coresrcmainjavaorgspringframeworkobjenesisSpringObjenesis.java
    Error:(20, 50) java: 程序包org.springframework.objenesis.instantiator不存在
    Error:(21, 46) java: 程序包org.springframework.objenesis.strategy不存在
    Error:(22, 46) java: 程序包org.springframework.objenesis.strategy不存在
    Error:(35, 41) java: 找不到符号
      符号: 类 Objenesis
    Error:(47, 23) java: 找不到符号
      符号:   类 InstantiatorStrategy
      位置: 类 org.springframework.objenesis.SpringObjenesis
    Error:(49, 60) java: 找不到符号
      符号:   类 ObjectInstantiator
      位置: 类 org.springframework.objenesis.SpringObjenesis
    Error:(68, 32) java: 找不到符号
      符号:   类 InstantiatorStrategy
      位置: 类 org.springframework.objenesis.SpringObjenesis
    Error:(110, 20) java: 找不到符号
      符号:   类 ObjectInstantiator
      位置: 类 org.springframework.objenesis.SpringObjenesis
    Error:(122, 23) java: 找不到符号
      符号:   类 ObjectInstantiator
      位置: 类 org.springframework.objenesis.SpringObjenesis
    Error:(69, 68) java: 找不到符号
      符号:   类 StdInstantiatorStrategy
      位置: 类 org.springframework.objenesis.SpringObjenesis
    Error:(111, 17) java: 找不到符号
      符号:   类 ObjectInstantiator
      位置: 类 org.springframework.objenesis.SpringObjenesis
    Error:(113, 25) java: 找不到符号
      符号:   类 ObjectInstantiator
      位置: 类 org.springframework.objenesis.SpringObjenesis
    Error:(119, 25) java: 找不到符号
      符号:   类 ObjectInstantiator
      位置: 类 org.springframework.objenesis.SpringObjenesis
    Error:(125, 25) java: 找不到符号
      符号:   类 ObjectInstantiator
      位置: 类 org.springframework.objenesis.SpringObjenesis
    Error:(131, 24) java: 找不到符号
      符号:   类 ObjenesisException
      位置: 类 org.springframework.objenesis.SpringObjenesis
    Error:(149, 35) java: 找不到符号
      符号:   类 ObjenesisException
      位置: 类 org.springframework.objenesis.SpringObjenesis
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

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

    解决问题过程: (《Spring 源码深度解析》中介绍的解决过程和下面的有一点不同,不过最终都是导入jar包 spring-objenesis-repack 和 spring-cglib-repack)
    打开命令行控制台 (注意:不要用idea的 Terminal ,我一直不成功)
    Win + R 输入cmd
    在这里插入图片描述
    切换工作目录到 spring 源码工程的根目录下
    在这里插入图片描述

    执行 gradle objenesisRepackJar 和 gradle cglibRepackJar
    报错: ‘gradle’ 不是内部或外部命令,也不是可运行的程序

    E:workspace_ideaspring-framework-5.0.x>gradle objenesisRepackJar
    'gradle' 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    
    • 1
    • 2
    • 3

    解决过程
    在C盘的 用户 目录下 搜索 gradle
    在这里插入图片描述
    在这里插入图片描述
    找到 所有版本的gradle 都在 C:UsersAdministrator.gradlewrapperdists
    在这里插入图片描述
    在idea 中 build.gradle文件中 找到 gradleversion ,可以看到版本是4.4.1
    在这里插入图片描述
    gradle 4.4.1 的执行程序在
    C:UsersAdministrator.gradlewrapperdistsgradle-4.4.1-bin&gopw3g8i1v3zqqx4q949t2xgradle-4.4.1in
    在这里插入图片描述
    创建系统环境变量
    GRADLE_HOME=C:UsersAdministrator.gradlewrapperdistsgradle-4.4.1-bin&gopw3g8i1v3zqqx4q949t2xgradle-4.4.1
    然后在系统环境变量 Path 的最后添加上 ;%GRADLE_HOME%in
    注意 别漏了符号 ;
    具体操作过程 和添加 JAVA_HOME的过程一样

    简略过程如下:
    win7 电脑 -》计算机 -》右键属性 -》 环境变量 -》 高级系统设置 -》 环境变量 -》新建系统变量:GRADLE_HOME值为C:UsersAdministrator.gradlewrapperdistsgradle-4.4.1-bin&gopw3g8i1v3zqqx4q949t2xgradle-4.4.1
    -》编辑系统变量Path 在最后面 增加;%GRADLE_HOME%in
    在这里插入图片描述
    在这里插入图片描述
    重新 在操作系统的cmd命令行控制台 (注意:不要用idea的 Terminal 中执行gradle操作,我一直不成功,暂时没有去找为什么会不成功),切换到spring源码的工作目录下面
    执行 gradle objenesisRepackJar 和 gradle cglibRepackJar
    在这里插入图片描述

    再次 idea 编译源码工程 Build -> Build Project
    发现解决了上述编译报错问题:找不到符号: 类 DefaultNamingPolicy InstantiatorStrategy ObjenesisException

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

    E:workspace_ideaspring-framework-5.0.xspring-aspectssrcmainjavaorgspringframeworkcontextannotationaspectjSpringConfiguredConfiguration.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:workspace_ideaspring-framework-5.0.xspring-aspectssrcmainjavaorgspringframeworkcacheaspectjAspectJJCacheConfiguration.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:workspace_ideaspring-framework-5.0.xspring-aspectssrcmainjavaorgspringframeworkschedulingaspectjAspectJAsyncConfiguration.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:workspace_ideaspring-framework-5.0.xspring-aspectssrcmainjavaorgspringframeworkcacheaspectjAspectJCachingConfiguration.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:workspace_ideaspring-framework-5.0.xspring-aspectssrcmainjavaorgspringframework	ransactionaspectjAspectJTransactionManagementConfiguration.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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    问题原因是使用了aspectJ ,而java不识别aspectJ

    四、下载安装AspectJ

    解决过程:
    下载AspectJ
    注:确保下载前安装了jdk
    https://www.eclipse.org/aspectj/downloads.php
    在这里插入图片描述
    安装AspectJ
    打开 系统cmd 命令行 切换工作目录到 下载的AspectJ 所在目录
    执行 java -jar aspectj-1.9.0.jar
    在这里插入图片描述
    安装过程中3个设置我都是默认的 直接next(注意第二步要设置自己已经安装的jdk家目录
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    五、为spring-aspect 工程添加Facets属性

    File -> Project Structure -> Facets -> 点击 + 按钮 -> AspectJ -> 选择 spring-aop_main -> 点击OK -> 右键spring-aop_main的Kotlin 选择删除,具体过程如下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    同上面给spring-aop_main添加Facets属性一样 给 spring-aspects_main 也添加Facets属性
    在这里插入图片描述
    在这里插入图片描述

    六、更改编译器

    在这里插入图片描述

    选择 Delegate to Javac ,作用是 只编译AspectJ的Facets

    再次编译 Build -> Build Project
    还是在报错,不过不需要去解决了,因为报错是 src est 下面的代码,不会影响我们看spring源码,所以不用解决下面问题

    E:workspace_ideaspring-framework-5.0.xspring-oxmsrc	estjavaorgspringframeworkoxmjaxbJaxb2UnmarshallerTests.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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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

  • 相关阅读:
    若依前后端分离版整合Mybatis-puls
    Linux 的交换空间(swap)是什么?有什么用?
    零食食品经营小程序商城的作用是什么
    策略梯度(Policy Gradient)算法学习
    数据分析---matplotlib模块
    用Python在PDF文档中插入单图像水印和平铺图像水印
    NC23054 华华开始学信息学
    Mysql高可用
    INFINI Labs 产品更新 | Gateway 支持基于 Kafka 的复制能力,发布 Helm Charts 部署方式
    前端通过AJAX收集文件传输到python flask后端服务器指定目录文件夹中
  • 原文地址:https://blog.csdn.net/m0_67394360/article/details/126597374