Spring源码阅读环境搭建

一、环境说明:

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. 在本地新建一个文件夹spring-framework,用来存放git仓库代码
  2. 进入该文件夹,执行命令
    (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.(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)

Spring源码阅读环境搭建_第1张图片

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

你可能感兴趣的:(spring)