会写这个博客的原因来自我自己想学习 spring-framework 源码, 在导入源码的过程中遇到了一些问题, 明白了这个大项目导入IDE并不是一个简单的事情, 就此写下笔记
步骤
spring-framework 的源码还是比较好找的, github 上一搜就是第一个
这里提供地址给懒得搜的同学:
https://github.com/spring-projects/spring-framework
使用git客户端可以很容易把源码下载到本地硬盘
git clone https://github.com/spring-projects/spring-framework.git
但 github 毕竟在外网, 有时候因为网络问题并不能很顺利下载下来, 我使用 码云 把项目导入到国内, 再把项目下载下来, 就快很多
这里提供码云地址给需要的同学
https://gitee.com/Sod-Momas/spring-framework
克隆命令
git clone https://gitee.com/Sod-Momas/spring-framework.git
不过导入的项目有个缺点, 就是无法及时同步到 github 上的源码更新, 需要定时去点一下同步, 如果有同学注意到代码过旧了, 可以在评论区提醒我一下, 我去点一下同步, 或者读者自己建个仓库导入也行.
修改 gradle 配置有两点
spring-aspects
模块修改的文件如下
./settings.gradle
第1行
pluginManagement {
repositories {
// 添加阿里云仓库
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
maven { url 'https://maven.aliyun.com/repository/spring' }
// gradlePluginPortal()
// maven { url 'https://repo.spring.io/plugins-release' }
}
}
apply from: "$rootDir/gradle/build-cache-settings.gradle"
include "spring-aop"
// 去除 aspects 模块
//include "spring-aspects"
include "spring-beans"
include "spring-context"
include "spring-context-support"
include "spring-context-indexer"
./build.gradle
第 296 行
repositories {
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/spring' }
// mavenCentral()
// maven { url "https://repo.spring.io/libs-spring-framework-build" }
maven { url "https://repo.spring.io/snapshot" }
}
buildSrc/build.gradle
第 5 行
repositories {
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
// mavenCentral()
// gradlePluginPortal()
}
Import Project
导入项目Gradle
项目模型spring-oxm
项目spring-aspects
模块编译spring-framework
导入的方法如图
编译 spring-oxm
项目, 使用 IDEA 里的命令行工具执行 ./gradlew :spring-oxm:compileTestJava
编译成功如图
这一步编译成功的话, 说明项目整体已经没有问题了, 可以把刚刚在 settings.gradle
里注释的 include 'spring-aspects'
加回来, 让该模块加入编译
最后, 执行整个项目的编译
可以使用命令行
./gradlew build
也可以使用 IDEA 带的 build 工具栏刷新一下
因为我是第二次编译所以很快, 第一次编译有可能会花上一个小时的时间, 请注意
这一步的话, 我目前还没有完美解决, 因为 spring 对 gradle 做了很多配置, 导致加入gradle 子模块需要修改很多东西, 我也懒得去折腾了, 就直接在一个子模块里写自己的代码了
如图
教程到这里就结束了, 如果有什么不明白可以在评论区里向我提出, 我会尽量添加到博客里来
为了方便大家学习, 我把编译过的 spring-framework 源码打包了一份传到网盘里, 需要的同学可以下载使用