当前位置:   article > 正文

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

failed to invoke getadditionalvisiblesourcesets on org.jetbrains.kotlin.grad

参考 《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
在这里插入图片描述
报错:

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

根据报错信息
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
具体如下:

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

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

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

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

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

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

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

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

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

  1. E:\workspace_idea\spring-framework-5.0.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. E:\workspace_idea\spring-framework-5.0.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. E:\workspace_idea\spring-framework-5.0.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. E:\workspace_idea\spring-framework-5.0.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. E:\workspace_idea\spring-framework-5.0.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

问题原因是使用了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\test\ 下面的代码,不会影响我们看spring源码,所以不用解决下面问题

  1. E:\workspace_idea\spring-framework-5.0.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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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

 

reference:

https://blog.csdn.net/a704397849/article/details/102754505?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-7.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-7.control

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/223445
推荐阅读
相关标签
  

闽ICP备14008679号