我是Gradle和Groovy的新手,我试图定义一个在MySQL中执行SQL脚本的任务。这是我到目前为止有:Gradle任务原型设计
task executeSomeSQL(type: Exec){
def pwd = getMySQLPwd()
workingDir './'
commandLine 'mysql', '-uroot', "--password=$pwd", 'dbname'
standardInput file('database/script.sql').newInputStream()
}
现在这工作正常,但是,我想能够定义很多这样的任务,只有在他们采取了输入脚本不同。在我看来,我需要一种方法来使用通用属性(获取密码,设置工作目录和设置命令)对SQL执行任务进行原型设计,然后使用自己的文件名定义每个任务。在一种伪代码的:
// define a function or closure? this doesn't work because the
// three task specific properties aren't defined
def sqlExecutorDef(filename){
def pwd = getMySQLPwd()
workingDir './'
commandLine 'mysql', '-uroot', "--password=$pwd", 'dbname'
standardInput file(filename).newInputStream()
}
// this is truly pseudocode: somehow the task should be created
// using a function that defines it
task executeSomeSQL(type: Exec) = sqlExecutorDef('database/script.sql')
这样,我可以定义许多任务,每一个需要被执行,有一个班轮SQL脚本之一。
编辑:对于具有更多Groovy经验的人来说,这可能是微不足道的。我道歉!
要做到这一点,你会写在内部使用'project.exec'执行SQL脚本自己的任务类。您可以在[Gradle用户指南](http://gradle.org/docs/current/userguide/userguide_single.html)中了解有关编写任务类的更多信息。 –