一、环境说明:
1.idea版本 2018.1
2.gradle版本 4.6(这个是我试了好几个gradle版本3.x和5.x试过了,发现编译失败;最后试出了这个版本能让项目编译成功)
3.jdk版本 1.8.0_161
二、获取源码
下载spring-framework(https://github.com/zhangsan/spring-framework)源码,分支版本为5.1.x
操作步骤:
三、遇到的问题:
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
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:361)
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:568)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
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
大意是说,kotlin插件版本不一致
解决方法:升级kotlin插件(https://blog.csdn.net/change987654321/article/details/82756816)
2.再次运行单元测试,出现报错:
Information:Kotlin: kotlinc-jvm 1.3.31 (JRE 1.8.0_161-b12)
Information:java: Errors occurred while compiling module 'spring-core_main'
Information:javac 1.8.0_161 was used to compile java sources
Information:2019-5-22 下午 16:24 - Compilation completed with 100 errors and 3 warnings in 18 s 672 ms
Warning:Kotlin: Language version 1.1 is deprecated and its support will be removed in a future version of Kotlin
Warning:Kotlin: Classpath entry points to a non-existent location: D:\Code\shucheng\IntelliJIdeaProjects\sourceStudy\spring-framework\spring-core\build\libs\spring-cglib-repack-3.2.11.jar
Warning:Kotlin: Classpath entry points to a non-existent location: D:\Code\shucheng\IntelliJIdeaProjects\sourceStudy\spring-framework\spring-core\build\libs\spring-objenesis-repack-3.0.1.jar
D:\Code\shucheng\IntelliJIdeaProjects\sourceStudy\spring-framework\spring-core\src\main\java\org\springframework\cglib\core\SpringNamingPolicy.java
Error:(30, 41) java: 找不到符号
符号: 类 DefaultNamingPolicy
D:\Code\shucheng\IntelliJIdeaProjects\sourceStudy\spring-framework\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
D:\Code\shucheng\IntelliJIdeaProjects\sourceStudy\spring-framework\spring-core\src\main\java\org\springframework\cglib\core\KeyFactory.java
Error:(27, 47) java: 程序包org.springframework.cglib.core.internal不存在
Error:(60, 30) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.core.KeyFactory
Error:(63, 30) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.core.KeyFactory
Error:(66, 30) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.core.KeyFactory
Error:(69, 30) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.core.KeyFactory
Error:(72, 30) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.core.KeyFactory
Error:(75, 30) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.core.KeyFactory
Error:(81, 30) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.core.KeyFactory
Error:(101, 29) java: 找不到符号
符号: 类 Customizer
位置: 类 org.springframework.cglib.core.KeyFactory
Error:(109, 29) java: 找不到符号
符号: 类 FieldTypeCustomizer
位置: 类 org.springframework.cglib.core.KeyFactory
Error:(127, 29) java: 找不到符号
符号: 类 HashCodeCustomizer
位置: 类 org.springframework.cglib.core.KeyFactory
Error:(142, 29) java: 找不到符号
符号: 类 Customizer
位置: 类 org.springframework.cglib.core.KeyFactory
Error:(155, 61) java: 找不到符号
符号: 类 Customizer
位置: 类 org.springframework.cglib.core.KeyFactory
Error:(159, 61) java: 找不到符号
符号: 类 KeyFactoryCustomizer
位置: 类 org.springframework.cglib.core.KeyFactory
Error:(159, 94) java: 找不到符号
符号: 类 KeyFactoryCustomizer
位置: 类 org.springframework.cglib.core.KeyFactory
Error:(163, 81) java: 找不到符号
符号: 类 Customizer
位置: 类 org.springframework.cglib.core.KeyFactory
Error:(167, 81) java: 找不到符号
符号: 类 KeyFactoryCustomizer
位置: 类 org.springframework.cglib.core.KeyFactory
Error:(168, 30) java: 找不到符号
符号: 类 KeyFactoryCustomizer
位置: 类 org.springframework.cglib.core.KeyFactory
Error:(197, 25) java: 找不到符号
符号: 类 CustomizerRegistry
位置: 类 org.springframework.cglib.core.KeyFactory.Generator
Error:(219, 43) java: 找不到符号
符号: 类 Customizer
位置: 类 org.springframework.cglib.core.KeyFactory.Generator
Error:(223, 43) java: 找不到符号
符号: 类 KeyFactoryCustomizer
位置: 类 org.springframework.cglib.core.KeyFactory.Generator
D:\Code\shucheng\IntelliJIdeaProjects\sourceStudy\spring-framework\spring-core\src\main\java\org\springframework\cglib\core\AbstractClassGenerator.java
Error:(27, 47) java: 程序包org.springframework.cglib.core.internal不存在
Error:(28, 47) java: 程序包org.springframework.cglib.core.internal不存在
Error:(37, 60) java: 找不到符号
符号: 类 ClassGenerator
Error:(47, 17) java: 找不到符号
符号: 类 GeneratorStrategy
位置: 类 org.springframework.cglib.core.AbstractClassGenerator
Error:(49, 17) java: 找不到符号
符号: 类 NamingPolicy
位置: 类 org.springframework.cglib.core.AbstractClassGenerator
Error:(176, 42) java: 找不到符号
符号: 类 Predicate
位置: 类 org.springframework.cglib.core.AbstractClassGenerator
Error:(204, 37) java: 找不到符号
符号: 类 NamingPolicy
位置: 类 org.springframework.cglib.core.AbstractClassGenerator
Error:(213, 16) java: 找不到符号
符号: 类 NamingPolicy
位置: 类 org.springframework.cglib.core.AbstractClassGenerator
Error:(249, 33) java: 找不到符号
符号: 类 GeneratorStrategy
位置: 类 org.springframework.cglib.core.AbstractClassGenerator
Error:(258, 16) java: 找不到符号
符号: 类 GeneratorStrategy
位置: 类 org.springframework.cglib.core.AbstractClassGenerator
Error:(80, 31) java: 找不到符号
符号: 类 LoadingCache
位置: 类 org.springframework.cglib.core.AbstractClassGenerator.ClassLoaderData
Error:(90, 31) java: 找不到符号
符号: 类 Predicate
位置: 类 org.springframework.cglib.core.AbstractClassGenerator.ClassLoaderData
Error:(96, 38) java: 找不到符号
符号: 类 Function
位置: 类 org.springframework.cglib.core.AbstractClassGenerator.ClassLoaderData
Error:(125, 24) java: 找不到符号
符号: 类 Predicate
位置: 类 org.springframework.cglib.core.AbstractClassGenerator.ClassLoaderData
D:\Code\shucheng\IntelliJIdeaProjects\sourceStudy\spring-framework\spring-core\src\main\java\org\springframework\cglib\core\ReflectUtils.java
Error:(182, 23) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.core.ReflectUtils
Error:(577, 23) java: 找不到符号
符号: 类 MethodInfo
位置: 类 org.springframework.cglib.core.ReflectUtils
Error:(606, 23) java: 找不到符号
符号: 类 MethodInfo
位置: 类 org.springframework.cglib.core.ReflectUtils
Error:(610, 23) java: 找不到符号
符号: 类 ClassInfo
位置: 类 org.springframework.cglib.core.ReflectUtils
D:\Code\shucheng\IntelliJIdeaProjects\sourceStudy\spring-framework\spring-core\src\main\java\org\springframework\cglib\proxy\MethodProxy.java
Error:(23, 38) java: 找不到符号
符号: 类 CodeGenerationException
位置: 程序包 org.springframework.cglib.core
Error:(24, 38) java: 找不到符号
符号: 类 GeneratorStrategy
位置: 程序包 org.springframework.cglib.core
Error:(25, 38) java: 找不到符号
符号: 类 NamingPolicy
位置: 程序包 org.springframework.cglib.core
Error:(26, 38) java: 找不到符号
符号: 类 Signature
位置: 程序包 org.springframework.cglib.core
Error:(27, 41) java: 程序包org.springframework.cglib.reflect不存在
Error:(39, 17) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.proxy.MethodProxy
Error:(41, 17) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.proxy.MethodProxy
Error:(125, 24) java: 找不到符号
符号: 类 FastClass
位置: 类 org.springframework.cglib.proxy.MethodProxy
Error:(144, 16) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.proxy.MethodProxy
Error:(171, 9) java: 找不到符号
符号: 类 FastClass
位置: 类 org.springframework.cglib.proxy.MethodProxy
Error:(177, 9) java: 找不到符号
符号: 类 FastClass
位置: 类 org.springframework.cglib.proxy.MethodProxy
Error:(190, 52) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.proxy.MethodProxy
Error:(106, 17) java: 找不到符号
符号: 类 NamingPolicy
位置: 类 org.springframework.cglib.proxy.MethodProxy.CreateInfo
Error:(108, 17) java: 找不到符号
符号: 类 GeneratorStrategy
位置: 类 org.springframework.cglib.proxy.MethodProxy.CreateInfo
Error:(90, 17) java: 找不到符号
符号: 类 FastClass
位置: 类 org.springframework.cglib.proxy.MethodProxy.FastClassInfo
Error:(92, 17) java: 找不到符号
符号: 类 FastClass
位置: 类 org.springframework.cglib.proxy.MethodProxy.FastClassInfo
D:\Code\shucheng\IntelliJIdeaProjects\sourceStudy\spring-framework\spring-core\src\main\java\org\springframework\cglib\proxy\Enhancer.java
Error:(38, 38) java: 找不到符号
符号: 类 ClassEmitter
位置: 程序包 org.springframework.cglib.core
Error:(39, 38) java: 找不到符号
符号: 类 CodeEmitter
位置: 程序包 org.springframework.cglib.core
Error:(40, 38) java: 找不到符号
符号: 类 CodeGenerationException
位置: 程序包 org.springframework.cglib.core
Error:(41, 38) java: 找不到符号
符号: 类 CollectionUtils
位置: 程序包 org.springframework.cglib.core
Error:(42, 38) java: 找不到符号
符号: 类 Constants
位置: 程序包 org.springframework.cglib.core
Error:(43, 38) java: 找不到符号
符号: 类 DuplicatesPredicate
位置: 程序包 org.springframework.cglib.core
Error:(44, 38) java: 找不到符号
符号: 类 EmitUtils
位置: 程序包 org.springframework.cglib.core
Error:(46, 38) java: 找不到符号
符号: 类 Local
位置: 程序包 org.springframework.cglib.core
Error:(47, 38) java: 找不到符号
符号: 类 MethodInfo
位置: 程序包 org.springframework.cglib.core
Error:(48, 38) java: 找不到符号
符号: 类 MethodInfoTransformer
位置: 程序包 org.springframework.cglib.core
Error:(49, 38) java: 找不到符号
符号: 类 MethodWrapper
位置: 程序包 org.springframework.cglib.core
Error:(50, 38) java: 找不到符号
符号: 类 ObjectSwitchCallback
位置: 程序包 org.springframework.cglib.core
Error:(51, 38) java: 找不到符号
符号: 类 ProcessSwitchCallback
位置: 程序包 org.springframework.cglib.core
Error:(53, 38) java: 找不到符号
符号: 类 RejectModifierPredicate
位置: 程序包 org.springframework.cglib.core
Error:(54, 38) java: 找不到符号
符号: 类 Signature
位置: 程序包 org.springframework.cglib.core
Error:(55, 38) java: 找不到符号
符号: 类 Transformer
位置: 程序包 org.springframework.cglib.core
Error:(56, 38) java: 找不到符号
符号: 类 TypeUtils
位置: 程序包 org.springframework.cglib.core
Error:(57, 38) java: 找不到符号
符号: 类 VisibilityPredicate
位置: 程序包 org.springframework.cglib.core
Error:(58, 38) java: 找不到符号
符号: 类 WeakCacheKey
位置: 程序包 org.springframework.cglib.core
Error:(95, 30) java: 找不到符号
符号: 类 CallbackFilter
位置: 类 org.springframework.cglib.proxy.Enhancer
Error:(152, 30) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.proxy.Enhancer
Error:(155, 30) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.proxy.Enhancer
Error:(158, 30) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.proxy.Enhancer
Error:(161, 30) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.proxy.Enhancer
Error:(164, 30) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.proxy.Enhancer
Error:(171, 30) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.proxy.Enhancer
Error:(174, 30) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.proxy.Enhancer
Error:(177, 30) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.proxy.Enhancer
Error:(180, 30) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.proxy.Enhancer
Error:(183, 30) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.proxy.Enhancer
Error:(186, 30) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.proxy.Enhancer
Error:(189, 30) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.proxy.Enhancer
Error:(192, 30) java: 找不到符号
符号: 类 Signature
位置: 类 org.springframework.cglib.proxy.Enhancer
Error:(217, 17) java: 找不到符号
符号: 类 CallbackFilter
位置: 类 org.springframework.cglib.proxy.Enhancer
Error:(219, 17) java: 找不到符号
符号: 类 Callback
位置: 类 org.springframework.cglib.proxy.Enhancer
解决方法:进入spring-core所在目录(D:\Code\shucheng\IntelliJIdeaProjects\sourceStudy\spring-framework\spring-core),打开cmd窗口,依次运行以下两条命令
(https://blog.csdn.net/cn12306com/article/details/79691709
https://blog.csdn.net/haocircle0406/article/details/89058994)
gradle objenesisRepackJar
gradle cglibRepackJar
参考链接:https://blog.csdn.net/change987654321/article/details/82756816
https://blog.csdn.net/cn12306com/article/details/79691709
https://blog.csdn.net/haocircle0406/article/details/89058994
import-into-idea#known issues