1.下载spring源码
码云上spring源码下载地址:https://gitee.com/mirrors/spring-framework
在这里可以切换分支。
2.查看源码gradle的版本号
找到源码下gradle下的wrapper,查看gradle-wrapper.properties文本

源码gradle版本为4.4.1,我们保证与源码版本一致。
2.1下载gradle
gradle下载渠道有很多,大家可以去官方下载,也可以在镜像网站下载,这里给大家提供一个腾讯的镜像地址:https://mirrors.cloud.tencent.com/gradle/
解压完后配置环境变量


配置完成后查看gradle版本

3.导入Spring源码
导入源码是选择本地gradle

源码导入成功后,将gradle-wrapper.properties中distributionUrl指向本地,加快本地编译

在build.gradle里,为仓库添加阿里镜像

repositories {
maven{ url ‘https://maven.aliyun.com/nexus/content/groups/public/’ }
maven{ url ‘https://maven.aliyun.com/nexus/content/repositories/jcenter’ }
maven { url “https://maven.aliyun.com/nexus/content/repositories/spring” }
mavenCentral()
}
然后选择右边的gradle,刷新等待编译
4.编译过程中遇到的坑
4.1dokka.pom文件找不到

将build.gradle文件中org.jetbrains.dokka版本由0.9.15改为0.9.17,如下图

4.2Kotlin版本报错
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:2022-03-27 下午 22: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
需要查看自己idea中Kotlin插件版本

我的版本为1.2.31,需在build.gradle中修改kotlin版本为当前插件版本

重新编译
4.3 objenesis.xx 不存在的报错
在以上操作完成后,进行单元测试时,又发现如下错误:
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
解决办法:进入spring-core所在目录,在该目录下执行以下命令:
gradle objenesisRepackJar
gradle cglibRepackJar
参考:
https://blog.csdn.net/cn12306com/article/details/79691709
https://blog.csdn.net/haocircle0406/article/details/89058994
https://blog.csdn.net/u010999809/article/details/90444714
本文详细记录了在编译Spring源码过程中遇到的坑,包括dokka.pom文件找不到、Kotlin版本报错、objenesis相关类找不到等问题,并提供了相应的解决方案,如修改dokka版本、调整Kotlin版本、执行特定gradle任务等。

6069

被折叠的 条评论
为什么被折叠?



