准备源码
克隆项目到本地并进入项目:
git clone https://github.com/spring-projects/spring-framework.git
cd spring-framework
由于拉取的是整个项目仓库,需要定位到某次源码可用的提交。
一般标记源码可用的提交通常是使用 git 的特性 tag 来完成这一操作, Spring Framework 这一项目也不例外。
因此你可以通过下面令名行来获取所有的稳定的版本标签:
git tag
这里我选择了最新的v6.0.4版本,为了防止对 main 分支的干扰,我选择创建分支并定位到对应版本的提交:
git checkout -b 6.0.x
git reset --hard v6.0.4
到此,源码准备完成。当然你也可以从 Spring 仓库提供的 Release 中下载源码。
设置环境
编译你需要了解该项目使用的是什么Java版本,防止Java版本不兼容带来的错误。
Spring 采用的是 gradle 构建工具,如果你恰巧了解 gradle 的 DSL(Domain-specific language) 的话(换句话了解 gradle 项目配置文件),那么你应该知道 gradle 有 sourceCompatibility/targetCompatibility 用来指明 Java 的版本。
因此 spring-framework 工作目录下全局搜索 sourceCompatibility 或者 targetCompatibility,很快便能定位项目使用的 Java 版本。
6.0.4 使用的是 Java 17。
所以如果我使用是命令行的话,需要将本地 Java 版本更换为 Java 17,如果我使用的是IDE的话,我需要在IDE中指定 Java 17 版本。
构建项目
首先不建议使用下面这个命令构建:
./gradlew build
如果你有使用 ./gradlew tasks 去了解所有的任务的话,你会发现 build 的描述如下:
build - Assembles and tests this project.
组装并测试,首先单元测试费时费力,其次单元测试的不通过并不代表项目的不能构建。
就 6.0.4 版本来说单元测试会浪费我很多时间,并且提示我一堆不友好的错误,然而这次错误除了阻止我继续探索外,并不能对刚入门的我提供任何有用的信息。
同时如果你有查阅 gradle 官方文档(Java Plugin - Gradle)的话,你会发现 build 是聚合任务。
build 依赖 check 和 assemble 任务,check 依赖 test 任务,assemble 依赖 jar 任务(每个任务做了什么,我也推荐你去官方文档了解)。
从聚合任务中排除某个任务就可以使用 -x 选项。
所以使用下面的命令排除 test 任务对于刚入门的我们是明智之举:
./gradlew build -x test
构建完成后,,我们可以看到项目及其子项目的jar包生成。
总结及展望
至此,从 Spring Framework 源码的构建已经完成,后续再为大家讲述如何使用已经构建好的Jar包。