2013-05-03 6 views
0

В моем сценарии build.gradle у меня много задач, каждый из которых зависит от нуля или более других задач.Управление выполнением задачи Gradle

Существует три «основных» задачи, которые можно назвать: moduleInstallation, backupFiles и restoreFiles.

Возникает вопрос: я хотел бы сказать Gradle, какие задачи выполнить и которые не нужно выполнять. Например, при вызове moduleInstallation я хочу, чтобы все зависящие задачи выполнялись (независимо от их UP-TO-DATE flag), но не задач восстановления. Я попытался изменить фазу, в которой выполняются задачи (например, фаза конфигурации, этап выполнения, ...) и несколько других вещей, но все задачи просто продолжают выполняться.

Решение, о котором я думал, просто указывало на основные задачи, которые, когда эта основная задача называется (fe moduleInstallation), мы устанавливаем UP-TO-DATE flag всех несвязанных задач в false, поэтому они не получают казнены. Это возможно?

EDIT: Вот пример:

Когда moduleInstallation называется (который зависит от backupFiles), restoreFiles (который зависит от restoreFromDate) выполняется слишком.

Первое основное действие

task moduleInstallation << { 
    println "Hello from moduleInstallation" 
} 

task backupFiles { 
    doLast { 
     println "Hello from backupFiles" 
    } 
} 

Второе основное действие

task restoreFiles { 
    println "Hello from restoreFiles" 
} 

task restoreFromDate { 
    println "Hello from restoreFromDate" 
} 

Зависимости:

moduleInstallation.dependsOn backupFiles 
restoreFiles.dependsOn restoreFromDate 

Так белый ен я типа gradle moduleInstallation в терминале, я получаю следующий вывод:

Hello from restoreFromDate 
Hello from restoreFiles 
Hello from backupFiles 
Hello from moduleInstallation 
+0

Способ сообщить Gradle, что другие задачи для выполнения - установить правильные зависимости задачи. Почему вы хотите только выполнить подмножество зависимостей задач? –

+0

@Peter: Как указано, зависимости правильны. Просто я хочу иметь 1 скрипт, дающий пользователю 3 возможных основных действия (каждый из которых состоит из разных задач и зависимостей), которые не имеют никакого отношения друг к другу. И поскольку они не имеют ничего общего друг с другом, они не должны выполняться, когда требуется другое основное действие. –

+0

Звучит как проблема с вашим скриптом сборки. Пожалуйста, предоставьте минимальный автономный пример. –

ответ

3

Второй фрагмент должен использовать doLast (или его << ярлык), как и первый фрагмент. В противном случае код является кодом конфигурации и будет оцениваться всегда, независимо от того, какие задачи в конечном итоге будут выполнены. Другими словами, здесь выполняются не задачи restoreFiles и restoreFromDate (как можно сказать из битов вывода командной строки, которые вы не показываете), но (только) их код конфигурации.

Чтобы лучше понять, что здесь происходит (что важно для понимания Gradle), я рекомендую изучить главу Build Lifecycle в Gradle User Guide.

+0

Имеет смысл. Поэтому я должен был бы использовать все функции '<<'? –

+1

Весь код, который должен быть запущен, если и когда выполняемая задача выполняется, должен перейти в 'doLast {...}' или '<< {...}'. (Оба 'doLast' и' << 'добавляют * задачу * задачи к задаче.) Я рекомендую использовать' doLast', потому что это приводит к более регулярному синтаксису и, скорее всего, добавляется/исключается случайно. –

+0

Хорошо, спасибо за это! –

Смежные вопросы