相信很多学习Spring源码的读者都尝试过导入spring源码、最后都因为一些原因最终放弃导入源码,比如我所遇到的原因;
- clone 太慢了
- gradle不熟悉
- 导入之后报了很多错误(之后读源码就一直这样,也懒得问了)
- 版本兼容问
git clone https://github.com/spring-projects/spring-framework.git
等待下载完成之后,进入目录执行
gradlew :spring-oxm:compileTestJava
可以看到这里生成一个.gradle文件夹
可以看到我们所用的gradle版本
然后在init.d里面新增一个文件init.gradle
输入如下内容
allprojects{ repositories { def ALIYUN_REPOSITORY_URL = 'https://maven.aliyun.com/repository/public/' def ALIYUN_JCENTER_URL = 'https://maven.aliyun.com/repository/jcenter/' def ALIYUN_GOOGLE_URL = 'https://maven.aliyun.com/repository/google/' def ALIYUN_GRADLE_PLUGIN_URL = 'https://maven.aliyun.com/repository/gradle-plugin/' all { ArtifactRepository repo -> if(repo instanceof MavenArtifactRepository){ def url = repo.url.toString() if (url.startsWith('https://repo1.maven.org/maven2/')) { project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL." remove repo } if (url.startsWith('https://jcenter.bintray.com/')) { project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL." remove repo } if (url.startsWith('https://dl.google.com/dl/android/maven2/')) { project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GOOGLE_URL." remove repo } if (url.startsWith('https://plugins.gradle.org/m2/')) { project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_GRADLE_PLUGIN_URL." remove repo } } } maven { url ALIYUN_REPOSITORY_URL } maven { url ALIYUN_JCENTER_URL } maven { url ALIYUN_GOOGLE_URL } maven { url ALIYUN_GRADLE_PLUGIN_URL } }}
好了,我们的环境准备好了,下面开始导入项目了
由于我刚开始是在2017版本的idea中导入的代码,现在2020版本已找不到相关配置可以参考我上面给的博客(借用图片)
导入成功之后,项目基本上会自动构建,等待构建完成之后就可以了,但是最终卡在这里卡了三四个小时,一直报这个错误org.jetbrains.plugins.gradle.model.BuildScriptClasspathModel'
据说是idea不支持高版本造成的,于是我尝试着把gradle改成4.4.1又报下面这个错误。
java.lang.AbstractMethodError: org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierIm
最后无奈把idea版本升级了,然后再打开,大概等了一个小时左右就好了,运行相关测试类,可以跑通。如图