使用来自 Gradle 任务的参数调用 Gradle 命令和任务

Calling Gradle commands and tasks with parameters from Gradle Task

我正在尝试了解 build.gradle 中的当前设置。我需要许多任务以非常特定的顺序执行,并通过一个任务调用执行所有任务。我想要的设置如下所示:

1.) 运行 liquibase 变更集到预定义数据库 2.) 运行 一些针对数据库的测试 3.) 回滚使用之前的变更集所做的所有变更

我希望数据库在每次测试时都处于 'clean' 状态。它应该只有我期望的变化,没有别的。 liquibase 是用 Gradle 插件设置的,变更集是 applied/updated。但是,我不想手动调用命令。这将是在持续集成中需要 运行 的东西,所以我需要编写脚本,所以我只需让我们的 CI 调用一个任务,然后 运行 按顺序调用每个任务,直到最后。我不确定如何从自身内部(即 build.gradle 文件内部)调用 Gradle 命令行任务,然后将参数传递给它(因为我需要调用某种类型回滚命令任务以使数据库恢复到调用更新之前的状态)。

现在,我所做的就是像这样调用命令行任务:

$ gradle update
$ gradle test
$ gradle rollbackToDate -PliquibaseCommandValue=2016-05-25

同样,我无法单独通过命令行调用它们。我在 Gradle 中需要一个自定义任务,这样我就可以调用类似的东西:

$ gradle runDatabaseTests

...我希望它做我期望的一切。

没有 gradle 方法可以直接从另一个任务 invoke/call 一个任务。您可以做的是使用 dependsOnfinalizedBy 设置任务依赖关系,这将强制先决条件任务先 运行。

如果你声明一个任务:

task runDatabaseTests(dependsOn: [update, test, rollbackToDate]) << {
    println "I depend on update, test and rollbackToDate"
}

当你打电话给

gradle runDatabaseTests -PliquibaseCommandValue=2016-05-25

它会先强制更新、测试和回滚到日期。您可以控制它们 运行 的顺序,如果您关心这一点,可以使用 mustRunAfter and/or shouldRunAfter