我有一个gradle任务,我想拥有2个不同的版本。该任务是一个名为“migrate”的自定义任务,该任务将应用数据库迁移,以便以后生成数据库类。
我想创建一个具有不同配置的副本,以将迁移应用于本地数据库。
目前,我有:
task migrateLocal(type: com.me.tasks.ApplyMigrationsTask) {
port = 3306
dbName = "me"
host = 'localhost'
migrationsDirectoryPath = project.layout.projectDirectory.dir("src/main/resources/me/migrations")
}
但是,我收到一个错误
Cannot cast object '3306' with class 'java.lang.Integer' to class 'org.gradle.api.provider.Provider'
经过进一步调查,我尝试执行以下操作:
task migrateLocal(type: com.me.tasks.ApplyMigrationsTask) {
port.set(3306)
dbName.set("me")
host.set('localhost')
migrationsDirectoryPath.set(project.layout.projectDirectory.dir("src/main/resources/me/migrations"))
}
但是然后我得到一个错误:
Cannot get the value of write-only property 'port' for task 'migrateLocal'
正确的方法是什么?我无法找到有关此模式或这些错误的文档。
谢谢。
最佳答案
有很多方法可以做到这一点。
一种方法是为每个配置定义通用任务:
def configs = ["C1", "C2"]
configs.each{ cfg ->
// call this using migrateLocalC1 or migrateLocalC2
task "migrateLocal${cfg}"{
description 'some generic task'
// do magic
}
}
然后,您可以进一步全局定义例如
def dbNameC1="me"
,并通过dbName = ${dbname${cfg}}
在相应的任务中检索/设置该值(在我的示例中,这是在// do magic
上发生的)。在我看来,更适合您的情况的另一种方法是将这些属性存储在配置中,特别是可以将其放入
gradle.properties
中。例如,您可以放置一个属性dbName=me
,然后通过${dbName}
将其加载到您的Gradle任务中。请记住,这些是在配置上设置的,而不是在脚本执行上设置的。另外,您可以查看ext
。
关于gradle - 创建具有不同配置值的任务的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57226756/