最近学习spring-framework源码,在配置源码环境的过程中踩了不少坑,此处将配置过程记录下来,以便以后再配置的时候可以节省点时间。
本机环境:jdk1.8.0_161, IDEA2019.3.1, Gradle5.6.2, spring-framework-5.1.x, windows10
Gradle
安装
Spring-framework
使用 Gradle
环境构建,所以在编译Spring
源码时需要安装Gradle
环境,Gradle
和 Maven
的安装方式类似,都是直接下载压缩包 -> 解压 -> 配置环境变量 即可。
- 下载gradle压缩包
进入官网下载地址:https://gradle.org/releases/ 下载对应版本,此处我下载的是 5.6.2 - 解压压缩包
解压到你自己的目录下,我的目录是 D:\work\softSave\gradle-5.6.2 - 配置环境变量
- 配置 GRADLE_HOME = D:\work\softSave\gradle-5.6.2 (自己的解压目录);
- 在 PATH 中增加 %GRADLE_HOME%\bin
- 增加 GRADLE_USER_HOME 环境变量,指定自己的gradle下载的jar包放在什么地方,此处我配置了 D:\work\file\gradle_repo
- 在命令行输入 gradle -v, 如果出现如下信息则说明安装配置成功
- 配置本地仓库
直接安装的gradle
在进行build的时候某些包等资源会由于网络被墙的原因下载失败,所以可以配置gradle的全局仓库,我配置了阿里云的仓库:
在 gradle 解压目录的 init.d 目录下新建 init.gradle文件, 里面添加如下内容即可
allprojects{
repositories {
def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
all { ArtifactRepository repo ->
if(repo instanceof MavenArtifactRepository){
def url = repo.url.toString()
if (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com/')) {
project.logger.lifecycle "Repository ${repo.url} replaced by $REPOSITORY_URL."
remove repo
}
}
}
maven {
url REPOSITORY_URL
}
}
}
mac 版gradle镜像配置
mac版gradle镜像直接在项目里面的build.gradle里面加入以下代码(加在文件最后)即可:
buildscript {
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven{ url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
}
// dependencies {
// classpath 'com.android.tools.build:gradle:2.2.3'
// }
}
allprojects {
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven{ url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
}
}
下载 Spring-framework
源码
spring的所有项目都位于github上面,spring-framework 的github链接 https://github.com/search?q=org%3Aspring-projects+spring&unscoped_q=spring
- 打开链接,选择如下的项目
- 选择要下载的源码版本,并下载或直接使用git clone 到本地
编译源码
- 将源码导入到 IEDA 中,此时只能看代码,不能通过IDEA 找到直接点击进入对应的类中,是因为源码需要使用gradle 去构建
- 构建源码:
- spring-core 和 spring-aspect 两个工程是其他模块所依赖的,所以需要先构建这两个工程
a. 先进入到spring-aspect 目录下,在命令行输入 gradle build 命令构建,如图, 如果出现 BUILD SUCCESSFUL 则说明构建成功;
b. 进入 spring-core 目录,同样进行a 的操作; - 在spring-framework 目录下找到 buildSrc 目录,运行 build.gradle 文件即可编译源码。
注:源码编译过程中可能出现错误,如果是下载资源错误,则需要重新配置gradle的仓库,如果是其他错误,则可以尝试注释掉相应的行,大部分是test类中的错误,用此方法可以解决,编译通过后即可开森滴各种骚操作看源码了。