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

一、spring源码下载

转载:https://blog.csdn.net/a704397849/article/details/102754505

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

点击Branch master 选择5.1
在这里插入图片描述
选择下载zip
在这里插入图片描述

二、idea 导入源码工程

解压源码后,idea File -> Open 打开源码
在这里插入图片描述
选择spring源码,点击OK,打开项目的工程属性,点击OK
在这里插入图片描述
导入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.<init>(KotlinCoreEnvironment.kt:181)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.<init>(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.<init>(KotlinCoreEnvironment.kt:179)
	... 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
然后发现又报错,这些错就是需要安装Gradle环境
Error:(30, 41) java: 找不到符号: 类 DefaultNamingPolicy ,Objenesis ,InstantiatorStrategy ,ObjectInstantiator ,ObjenesisException
具体如下:

D:\workspace\spring-framework-5.1.x\spring-core\src\main\java\org\springframework\cglib\core\SpringNamingPolicy.java
Error:(30, 41) java: 找不到符号
  符号: 类 DefaultNamingPolicy
Error:(34, 9) java: 方法不会覆盖或实现超类型的方法
D:\workspace\spring-framework-5.1.x\spring-core\src\main\java\org\springframework\objenesis\SpringObjenesis.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

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

解决问题过程: (《Spring 源码深度解析》中介绍的解决过程和下面的有一点不同,不过最终都是导入jar包 spring-objenesis-repack 和 spring-cglib-repack)
打开命令行控制台 (注意:不要用idea的 Terminal ,我一直不成功)
Win + R 输入cmd
在这里插入图片描述
执行 gradle objenesisRepackJar 和 gradle cglibRepackJar
报错: ‘gradle’ 不是内部或外部命令,也不是可运行的程序

解决过程
在C盘的 用户 目录下 搜索 gradle
在这里插入图片描述

找到 所有版本的gradle 都在 C:\Users\xxx.gradle\wrapper\dists
在这里插入图片描述

在idea 中 build.gradle文件中 找到 gradleversion ,可以看到版本是4.4.1(博主找了,没有,但是发现C盘里只有一个版本得Gradle,(__),按道理,应该哪一个版本都可以 )

gradle 4.10.3 的执行程序在
C:\Users\xxx.gradle\wrapper\dists\gradle-4.10.3-bin\31t79e2qsceia4mkbojplrgx\gradle-4.10.3\bin

创建系统环境变量
GRADLE_HOME=C:\Users\xxx.gradle\wrapper\dists\gradle-4.10.3-bin\31t79e2qsceia4mkbojplrgx\gradle-4.10.3
在这里插入图片描述
然后在系统环境变量 Path 的最后添加上 %GRADLE_HOME%\bin
在这里插入图片描述
重新 在操作系统的cmd命令行控制台 (注意:不要用idea的 Terminal 中执行gradle操作,我一直不成功,暂时没有去找为什么会不成功),切换到spring源码的工作目录下面
执行
gradle objenesisRepackJar
gradle cglibRepackJar
在这里插入图片描述
博主已经下过了,所以重新下,就比较快,总之,看见BUILD SUCCESSFUL就可以了。

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

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

D:\workspace\spring-framework-5.1.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
D:\workspace\spring-framework-5.1.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
D:\workspace\spring-framework-5.1.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
D:\workspace\spring-framework-5.1.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
D:\workspace\spring-framework-5.1.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

问题原因是spring源码的AOP使用了aspectJ ,而java不识别aspectJ
解决过程:
下载AspectJ
注:确保下载前安装了jdk
https://www.eclipse.org/aspectj/downloads.php
在这里插入图片描述
在这里插入图片描述
安装过程中3个设置我都是默认的 直接next(注意第二步要设置自己已经安装的jdk家目录
在这里插入图片描述
安装第二部,要选择自己的jdk目录,如果jdk是安装板的,这里会自动选择,如果不是安装板的,需要手动选择一下。
在这里插入图片描述
选择aspectj安装目录
在这里插入图片描述
选择install。

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

File -> Project Structure -> Facets -> 点击 + 按钮 -> AspectJ -> 选择 spring-aop_main -> 点击OK -> 右键spring-aop_main的Kotlin 选择删除,(注意:如果发现idea的Facets点击后,右侧区域没反应,将项目删除,重新解压->导入idea即可)具体过程如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
同上面给spring-aop_main添加Facets属性一样 给 spring-aspects_main 也添加Facets属性

六、更改编译器

在这里插入图片描述
再次编译 Build -> Build Project
还是在报错,不过不需要去解决了,因为报错是 \src\test\ 下面的代码,不会影响我们看spring源码,所以不用解决下面问题

D:\workspace\spring-framework-5.1.x\spring-oxm\src\test\java\org\springframework\oxm\jaxb\Jaxb2UnmarshallerTests.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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值