1. 本文一路踩坑,一路排错,建议先通读一遍到最后,
2. 本文最后是成功将spring源码导入eclipse的,所以啊不用慌
Spring源码调试,遇到很多坑,这里记录一下过程,按部就班。
首先声明,本人之前没用过gradle,今天刚看了点皮毛,行家勿喷
git clone https://github.com/spring-projects/spring-framework.git
等他下载完,我们需要特别关注 以下文件
其中 gradle\wrapper\gradle-wrapper.properties 里面有一个gradle版本号,需要关注,表示的是作者用的gradle版本号,gradle版本最好保持一致,可以自行下载。
gradle 和 jdk 版本有兼容要求,注意jdk满足最低版本
源码下载完,可以备份一份,万一后面那啥直接从头开始,比较干净。
下载好如下:
看了一下,他此时是 6.0.0 版本,不慌,我们切换一下 tag 就行
完事现在OK 了
后面,我参考
https://blog.csdn.net/u013469325/article/details/106575704/ 配置
执行构建(官方md里面叫 precompile,预编译)
PS D:\MyWorkHome\CodeSpaceSrc\spring-framework> ./gradlew :spring-oxm:compileTestJava
Configuration on demand is an incubating feature.
> Task :spring-core:compileJava
D:\MyWorkHome\CodeSpaceSrc\spring-framework\spring-core\src\main\java\org\springframework\core\metrics\jfr\FlightRecorderStartupEvent.java:19: 错误: 程序包jdk.jfr不存在
import jdk.jfr.Category;
^
D:\MyWorkHome\CodeSpaceSrc\spring-framework\spring-core\src\main\java\org\springframework\core\metrics\jfr\FlightRecorderStartupEvent.java:20: 错误: 程序包jdk.jfr不存在
import jdk.jfr.Description;
完事报错? 查了一下,是说jdk版本太低(我用的 1.8.0.121),正好我本地有高的,重新配成 15.0.2的
完事又报错:
此处参考:
https://www.cnblogs.com/lenmom/p/11912497.html
https://www.jianshu.com/p/e96e8d4c3332
如果你看官方的 md 说明,其中是有说明的,是说他把 warning 当成 error处理了,这里要排除这个:
那我们用工具找一下(VScode),删除那个
文件名:
* What went wrong:
Execution failed for task ':spring-beans:compileGroovy'.
> 错误: 无效的标记:
(这时候凌晨0:11,谁再跟我讲gradle好用,我跟谁急)
emmmm,,上面粗暴的 删了单词,看来有点 go 的意思(不用的东西不留),那咱就把他注释了
好么,他是调用链
那就不整这个 spring-beans.gradle,还原文件,结果,成功了
又成功了
至此,两个预编译的命令成功了。
IDEA导入Spring源码
继续回到 https://blog.csdn.net/u013469325/article/details/106575704/
这边有一个注意点,先看文章:由于本人之前学了一下,心存怀疑,结果一搜索,,还真有讲究
https://blog.csdn.net/wusj3/article/details/110791719
大概意思是说,咱本地可以有一个 gradle,项目里面有一个 gradle,有点 node的感觉,可以有一个全局的,也可以再项目里面单独啥的,然后咱的idea版本可能比较低,跟原答主不一样。
(这个图里面有错误,看下面的图,这里粗心导致下面又开始排错,嗐)
完事,又报错:
java.lang.NoSuchMethodError
NoSuchMethodError,那就不要有了,我打算找到那个方法把它注释掉。
可能是由于我之前按照官网说法 把一个东西排除了,我把添加回去
再来:
结果还是不行,找到:
https://blog.csdn.net/u010132847/article/details/119535960
大概意思是说 idea版本太低,炸裂,还有就是我之前的 仓库配的有问题
这里有必要插入一张图:
https://blog.csdn.net/u010657219/article/details/53811150
反正我就是要用我自己的:
(最后的倔强)
决定升级 升级IDE到IntelliJ IDEA 2021.1.2 ?
开玩笑,用 eclipse 2020.06 搞,什么??好么,它只到jdk14,
直接上最新的eclipse,我去下一个!!
现在是凌晨 1:57,网速 20M,
https://blog.csdn.net/qq_27645299/article/details/72900801 版本号对照,结果版本太新,还得重下。。。
我还是太年轻:
重来:
直接 git 回退代码,
根据之前的经验,改那个 -Werror可以抵消 那个 预编译的问题
成功啦!!
Description Resource Path Location Type
Project at 'D:\MyWorkHome\CodeSpaceSrc\spring-framework' can't be named 'spring' because it's located directly under the workspace root. If such a project is renamed, Eclipse would move the container directory. To resolve this problem, move the project out of the workspace root or configure it to have the name 'spring-framework'. spring-framework line 0 Gradle Error Marker
能睡个好觉啦!! 了
明天还得上班呐
鸣谢:
https://blog.csdn.net/u013469325/article/details/106575704/
https://www.cnblogs.com/lenmom/p/11912497.html
https://www.jianshu.com/p/e96e8d4c3332
https://blog.csdn.net/wusj3/article/details/110791719
https://blog.csdn.net/u010132847/article/details/119535960
https://blog.csdn.net/u010657219/article/details/53811150
https://blog.csdn.net/qq_27645299/article/details/72900801