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

使用Gradle任务中的参数调用Gradle命令和任务,gradle,liquibase,Gradle,Liquibase,我试图理解build.gradle中的当前设置。我需要一系列的任务以一个非常特定的顺序进行,并通过一个任务调用执行所有任务。我想要的设置如下所示: $ gradle update $ gradle test $ gradle rollbackToDate -PliquibaseCommandValue=2016-05-25 1.)在预定义数据库中运行liquibase变更集 2.)对数据库运行许多测试 3.)回滚使用上一个变更集所做的所有更改 我希望每次测试时数据库都处于“干净”状态。它应该只

我试图理解build.gradle中的当前设置。我需要一系列的任务以一个非常特定的顺序进行,并通过一个任务调用执行所有任务。我想要的设置如下所示:

$ gradle update
$ gradle test
$ gradle rollbackToDate -PliquibaseCommandValue=2016-05-25
1.)在预定义数据库中运行liquibase变更集 2.)对数据库运行许多测试 3.)回滚使用上一个变更集所做的所有更改

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

现在,我所做的就是调用命令行任务,如下所示:

$ gradle update
$ gradle test
$ gradle rollbackToDate -PliquibaseCommandValue=2016-05-25
同样,我不能单独通过命令行调用它们。我需要Gradle中的自定义任务,这样我就可以调用如下内容:

$ gradle runDatabaseTests

…我会让它完成我所期望的一切。

直接从另一个任务调用/调用任务是不可能的。您可以改为使用
dependsOn
finalizedBy
设置任务依赖项,这将强制先运行prereq任务

如果您声明了一项任务:

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

它将首先强制更新、测试和回滚。您可以通过使用
mustRunAfter
和/或
shouldlrunafter

来控制它们的运行顺序,如果您关心这一点,那么我得到的是,无法从另一个任务运行任务(需要通过命令行输入参数)?这使得我正在使用的许多命令几乎不可能实现自动化。嗯,这不完全是真的。Gradle任务与常规函数不同,因此它们需要一个人以不同的方式思考。不过,有很多方法可以实现您想做的任何事情。您可以设置ext变量的值,后续任务可以使用ext变量作为示例。(也可以在渐变脚本中创建普通函数)