编译spring-framework源码
编译spring-framework源码会写这个博客的原因来自我自己想学习 spring-framework 源码, 在导入源码的过程中遇到了一些问题, 明白了这个大项目导入IDE并不是一个简单的事情, 就此写下笔记步骤下载源码修改gradle配置导入IDEA编写自己的代码下载源码spring-framework 的源码还是比较好找的, github 上一搜就是第一个这里...
编译spring-framework源码
会写这个博客的原因来自我自己想学习 spring-framework 源码, 在导入源码的过程中遇到了一些问题, 明白了这个大项目导入IDE并不是一个简单的事情, 就此写下笔记
步骤
- 下载源码
- 修改gradle配置
- 导入IDEA
- 编写自己的代码
下载源码
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 配置
修改 gradle 配置有两点
- 临时去除
spring-aspects
模块 - 修改 maven 仓库地址
修改的文件如下
-
./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()
}
导入 IntelliJ IDEA
- 使用
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 源码打包了一份传到网盘里, 需要的同学可以下载使用
- spring-framework-nogit.7z 去除了git历史信息的源码, 体积小, 下载快
- spring-framework-nocompiled.7z 包含完整 git 历史信息的源码, 未编译, 需要自己编译第一遍
- spring-framework-compiled.7z 包含完成 git 历史信息的源码, 包含已编译的 jar 包, 体积大, 但下载解压完后打开即用, 不用担心出问题
参考资料
- AliRepo 博客里使用的阿里云仓库地址均可从该页面找到
- 莫弹弹 / spring-framework 由作者导入到码云的 spring-framework 项目源码, 目前是 5.1.x 分支版本
- spring-framework/import-into-idea.md 这个是官方导入教程, 本文基本就是按照该文档步骤导入的. 这个文档存在于源码根目录, 读者可以自行打开阅读
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)