Я не знаю, почему doFirst () и doLst () не выполняются

#gradle #task

#gradle #задача

Вопрос:

Я использую gradle 4.9.

doFirst () и doLast () не выполняются с использованием типа копирования.

 task myCopyExtension(type : Copy){
    from 'original'
    into 'target'

    File newFile = file('original/newFile.txt')
    doFirst {
        println 'write to file'
        newFile.write('copy file', 'UTF-8')
    }
    doLast {
        File copied = file('original/newFile_copied.txt')
        if(newFile.renameTo(copied)){
            println 'copy complete'
        }else {
            println 'copy failed'
        }
    }
}
  

gralde myCopyExtension

отмечая pring

добавить ——

 task myCopy(type : Copy) {
    doLast{
        println 'myCopy!!'
    }
}
  

gradle myCopy

Ничего не выводится.

T_T

Комментарии:

1. Используйте --console=plain , и вы, вероятно, поймете, почему ничего не регистрируется.

2. gradle —console=обычная myCopyExtension > Задача: СБОРКА myCopyExtension БЕЗ ИСХОДНОГО КОДА ВЫПОЛНЕНА УСПЕШНО через 0 секунд

3. Итак, вы получаете свой ответ: ОТСУТСТВИЕ ИСТОЧНИКА означает, что копировать нечего, и задача, таким образом, не выполняется. Задача не должна создавать свои собственные входные данные. Если вы хотите создать файл, а затем скопировать его, то напишите задачу, которая создает файл, и сделайте задачу копирования зависимой от нее.

Ответ №1:

Перед выполнением вашей задачи gradle выполнит актуальную проверку, чтобы увидеть, изменились ли входные / выходные данные задачи с момента ее последнего запуска. Поэтому, если «исходные» и «целевые» папки не изменились с момента последнего выполнения, gradle пропустит задачу

Кроме того, вы не должны изменять файлы, которые используются в качестве входных данных задачи, поскольку это испортит проверку актуальности.

Смотрите https://docs.gradle.org/current/userguide/more_about_tasks.html#sec:up_to_date_checks

Комментарии:

1. задача myCopy(тип : Копировать) { doLast{ println ‘myCopy!!’ } } gradle myCopy Ничего не выводится.