Я новичок в Gradle and Groovy, и я пытаюсь определить задачу, которая выполняет SQL-скрипт в MySQL. Вот то, что я до сих пор:Создание прототипа задачи оградности
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 скрипт, который должен быть выполнен, с одной гильзе.
EDIT: это, вероятно, тривиально для кого-то, у кого больше опыта Groovy. Я извиняюсь!
чтобы сделать это, вы бы написать свой собственный класс задач, которые внутренне использует 'project.exec' для выполнения сценария SQL. Вы можете узнать больше о написании классов задач в [Руководстве пользователя Gradle] (http://gradle.org/docs/current/userguide/userguide_single.html). –