2016-12-06 3 views
2

Gradle doLast, поведение doFirst в задаче копирования

build.gradle

task hello (type: Copy) { 
    doLast { 
     println "print from within" 
    } 
    println "print from outside" 
} 

при запуске

Gradle -q привет

doLast {} закрытие даже не тронуто. изменить doLast к doFirst, я получаю тот же результат:

D:\>gradle -q hello 
print from outside 

без doLast или doFirst:

task hello (type: Copy) { 
    //doLast{ 
     println "print from within" 
    //} 
    println "print from outside" 
} 

он работает отлично:

D:\>gradle -q hello 
print from within 
print from outside 

Это только кажется происходит с задачами типа Copy. пожалуйста, помогите уточнить? Я использую gradle 2.4.

ответ

2

Если запустить задачу без -q переключателя вы заметите, что задача уже помечено как UP-TO-DATE. - это означает, что никакие действия (и вы не добавите действие через doLast были выполнены

Почему это в? в этом конкретном примере вы не сконфигурировали никакие входы и выходы для задачи. Copy задачи решают, что это современная база на входах и выходах, и поскольку ни один из них не был сконфигурирован, считается, что нет необходимости в ее запуске.

+0

, что объясняет частично. Я действительно попробовал другой вариант использования: добавьте ** из: ** и ** в: ** в ** ** закрытие doLast {} **. Подумайте, что, если исходный файл изменил содержимое, цель задачи в основном заключается в обновлении адресата. Как мы можем достичь этого? это действительно выглядит так, как doLast {} не будет затронута задачей копирования типа, несмотря ни на что. – Heinz

+0

Не имеет смысла помещать '' '' '' '' '' '' '' '' '' '' '' '' 'doLast'', поскольку' doLast' будет выполняться при * выполнении * время, когда '' '' 'и' from' используются во время * конфигурации * в фазе 'doLast', слишком поздно настраивать что-либо. Используйте 'from' и' in' внутри тела задачи, и он будет работать, как ожидалось. Также кажется, что вам нужно прочитать об основах градиента. [Здесь] (https://docs.gradle.org/current/userguide/build_lifecycle.html) хорошая отправная точка – Opal

+0

Мое оригинальное сообщение специально задает вопрос о задачах типа «Копировать». Я все еще озадачен. это файл ** build.gradle **: 'task mycopy (type: Copy) {from 'c: \ temp \ me.txt' в 'd: /'}
task hello() {doLast {println 'Hello , me '}} '. когда вы запускаете ** gradle build.gradle hello **, код внутри ** mycopy {} ** не будет запущен, хотя он должен быть запущен на этапе конфигурации. Что я делаю неправильно? – Heinz

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