一、环境说明:
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
操作步骤:
在本地新建一个文件夹spring-framework,用来存放git仓库代码进入该文件夹,执行命令 (1)git init 初始化git仓库 (2)git remote add origin https://github.com/zhangsan/spring-framework.git 添加远程仓库 (3)git pull 拉取最新代码 (4)git branch -a 查看远程仓库的所有分支 (5)git checkout 5.1.x 切换当前代码至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.<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: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.<init>(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<T> Error:(49, 17) java: 找不到符号 符号: 类 NamingPolicy 位置: 类 org.springframework.cglib.core.AbstractClassGenerator<T> Error:(176, 42) java: 找不到符号 符号: 类 Predicate 位置: 类 org.springframework.cglib.core.AbstractClassGenerator<T> Error:(204, 37) java: 找不到符号 符号: 类 NamingPolicy 位置: 类 org.springframework.cglib.core.AbstractClassGenerator<T> Error:(213, 16) java: 找不到符号 符号: 类 NamingPolicy 位置: 类 org.springframework.cglib.core.AbstractClassGenerator<T> Error:(249, 33) java: 找不到符号 符号: 类 GeneratorStrategy 位置: 类 org.springframework.cglib.core.AbstractClassGenerator<T> Error:(258, 16) java: 找不到符号 符号: 类 GeneratorStrategy 位置: 类 org.springframework.cglib.core.AbstractClassGenerator<T> 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