第一卷 从源码开始构建

103 阅读2分钟

准备源码

克隆项目到本地并进入项目:

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 构建工具,如果你恰巧了解 gradleDSL(Domain-specific language) 的话(换句话了解 gradle 项目配置文件),那么你应该知道 gradlesourceCompatibility/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 依赖 checkassemble 任务,check 依赖 test 任务,assemble 依赖 jar 任务(每个任务做了什么,我也推荐你去官方文档了解)。

从聚合任务中排除某个任务就可以使用 -x 选项。

所以使用下面的命令排除 test 任务对于刚入门的我们是明智之举:

./gradlew build -x test

构建完成后,,我们可以看到项目及其子项目的jar包生成。

总结及展望

至此,从 Spring Framework 源码的构建已经完成,后续再为大家讲述如何使用已经构建好的Jar包。