Я боролся с этим в течение полутора дней или около того. Я пытаюсь повторить следующий Ant концепции в Gradle:Что такое эквивалент Ant taskdef в Gradle?
<target name="test">
...
<runexe name="<filename> params="<params>" />
...
</target>
где runexe
объявлен в другом месте, как
<macrodef name="runexe" >
...
</macrodef>
и может также быть taskdef
или scriptdef
то я хотел бы быть в состоянии для вызова повторно используемого заранее заданного блока кода и передачи ему необходимых параметров из задач Gradle. Я много пробовал. Я могу создать задачу, которая запускает exe без каких-либо проблем:
task runexe(type: Exec){
commandLine 'cmd', '/c', 'dir', '/B'
}
task test(dependsOn: 'runexe') {
runexe {
commandLine 'cmd', '/c', 'dir', '/N', 'e:\\utilities\\'
}
}
test << {
println "Testing..."
// I want to call runexe here.
...
}
и использовать зависит от того, чтобы он работал. Однако это не позволяет мне запускать runexe
именно тогда, когда мне нужно. Я интенсивно экспериментировал с executable
, args
и commandLine
. Я играл с exec
и пробовал несколько разных вариантов, найденных здесь и вокруг сети. Я также работаю с бесплатными книгами, доступными на сайте Gradle.
Что мне нужно сделать, это прочитать список файлов из каталога и передать каждый файл в приложение с некоторыми другими аргументами. Список файлов не будет известен до времени выполнения, то есть до тех пор, пока скрипт не прочитает их, список может меняться, и вызов необходимо выполнить повторно.
Мой лучший вариант в настоящее время является тем, что я нашел here, что может быть и хорошо, но кажется, что должен быть лучший способ. Я понимаю, что задачи предназначены для вызова один раз и что вы не можете вызвать задачу из другой задачи или передать один параметр, но я очень хотел бы знать, какой правильный подход к этому находится в Gradle. Я надеюсь, что один из дизайнеров Gradle может быть достаточно любезен, чтобы рассказать мне об этом, поскольку этот вопрос часто задается во всем Интернете, и я еще не нашел ясного ответа или решения, которое я могу сделать.
Gradle, по дизайну, чрезвычайно гибкий. Техника, используемая в ссылке, упомянутой в последнем абзаце, выглядит для меня прекрасной. т. е. не все должно быть задачей; определение метода в порядке. –
Спасибо. Я теперь использовал функции, чтобы делать то, что хочу, но мне все равно было бы интересно узнать, есть ли еще способ Gradle-ish. – ConfusedAgain