You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle中确保schema:migrate在schema或codegen变更时重新执行

解决Gradle多项目中codegen变更时schema:migrate未执行的问题

核心问题在于:schema:migrate任务的增量构建判断仅依赖schema项目自身的输入输出,当codegen项目变更时,Gradle认为该任务无需重新执行,但CI环境是无状态的,没有留存之前的数据库迁移结果,导致codegen:generate因数据库未初始化失败。

以下是两种可靠的解决方案:

方案一:将codegen项目文件纳入schema:migrate的输入依赖

通过让schema:migrate任务感知codegen项目的变更,只要codegen的代码或配置发生变化,就触发migrate任务重新执行。在schema项目的build.gradle中添加配置:

tasks.named('migrate') {
    // 监听codegen项目的主源代码变更
    inputs.files(project(':codegen').sourceSets.main.allSource)
    // 监听codegen项目的构建配置文件变更
    inputs.files(project(':codegen').files('build.gradle', 'settings.gradle'))
}

这样,当codegen项目的任何源代码或构建配置修改时,schema:migrate的输入集合会发生变化,Gradle会自动标记该任务需要重新执行,确保CI环境中数据库处于最新状态供codegen使用。

方案二:禁用schema:migrate的构建缓存(备选)

如果不需要对schema:migrate任务使用远程构建缓存,可以直接禁用该任务的缓存特性,确保每次构建都执行迁移:

tasks.named('migrate') {
    outputs.cacheIf { false }
}

这种方法简单直接,但会牺牲schema项目无变更时的缓存效率,仅推荐在方案一不适用的场景下使用。

验证方法

修改codegen项目中的任意代码或配置文件,执行./gradlew app:build,观察schema:migrate任务是否会被触发执行,后续codegen:generate是否能正常完成。

内容的提问来源于stack exchange,提问作者mako-taco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 17:55:58