编译Spring源码省心小贴士
主要参考文档
国外:
- Build From Source 介绍如何编译 Spring 源代码
- Import into idea 帮助你解决一些项目导入 idea 的问题
国内:
- 如何编译spring的源码 出自B站Spring讲师,前Google华南区程序员子路老师
必要操作
如果导入 Idea,需要在 Spring-Framework 根目录下执行以下脚本:
gradlew :spring-oxm:compileTestJava
在 spring-core 模块下执行
gradle cglibRepackJar
gradle objenesisRepackJar
提速优化建议
Spring 下载提速
git clone https://gitee.com/mirrors/Spring-Framework.git
JDK 下载加速
推荐 清华大学镜像
指定本地 gradle-bin.zip
修改 Spring-Framework 项目目录下的 gradle\wrapper\gradle-wrapper.properties 文件
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
## distributionUrl=https\://services.gradle.org/distributions/gradle-6.6-bin.zip
distributionUrl=file\:///d\:/lib/gradle/gradle-6.6-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
这样可以免去多次下载gradle的功夫。
download gradle
依赖下载慢的问题
修改 Spring-Framework 项目目录下的 build.gradle 文件
repositories {
maven { url "https://maven.aliyun.com/repository/public" }
mavenCentral()
maven { url "https://repo.spring.io/libs-spring-framework-build" }
maven { url "https://repo.spring.io/milestone" } // Reactor
}
增加阿里云国内镜像,下载速度蹭蹭蹭~ 阿里云仓库指南,见下图(更新与2020-09-05)
定位“个性化”问题
gradlew build --info
通过命令行的方式,可以看到报错找到自己编译过程的特殊报错问题,“对症下药”。
构建成功标志
- 如果上一节 gradlew build 执行成功,那么此处应该也能刷新成功并出现一个个的子任务
- 如果依赖没有什么改变,可以选择开启“离线模式”,构建速度会更快!
运行debug遇到常见错误
CoroutinesUtils 是 Kotlin 的一个工具类。
Spring-Framework\spring-core\kotlin-coroutines\build\libs\kotlin-coroutines-5.3.0-SNAPSHOT.jar 添加为 spring.spring-core.main 的依赖,详细参考 https://www.bilibili.com/read/cv6134966/
右击 spring-instrument\src\test\java 文件夹,执行Run 'All Tests',在 spring-instrument 生成一个 out 文件夹 详细参考如何编译spring的源码