В Gradle, как я могу вывести временную метку после завершения всех задач? - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть мультипроектный проект Gradle, и в корневом проекте у меня есть следующее:

task timeStamp {
    doLast {
        Date now = new Date()
        println "All completed @ $now"
    }
}


allprojects {
    afterEvaluate {
        it.getTasks().each {
            println "finalize set for \"$it.name\""
            if (it.name != "timeStamp") {
                it.finalizedBy(':timeStamp')
            }
        }
    }
}

В моих выходных данных при запуске gradlew build запускается задача timeStamp, но онаВыполните до некоторых других задач.

Как я могу получить эту метку времени для печати после всех других выходных данных?(Я предпочитаю, чтобы это было непосредственно перед BUILD SUCCESSFUL in ##s в выводе, если это возможно)

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Если вы просто хотите напечатать отметку времени в конце сборки (после выполнения последней задачи), вы можете реализовать ее следующим образом:

gradle.getTaskGraph().whenReady { graph ->
    graph.getAllTasks().last().doLast {
        Date now = new Date()
        println "\n ***** All completed @ $now  ***"

    }
}

Таким образом, вы добавите действие к последней задачевыполняется согласно графику выполнения задачи, вычисленному Gradle.

Вы также можете использовать buildFinished ловушку, но обратный вызов будет выполнен после BUILD SUCCESSFUL in ##s сообщения

gradle.buildFinished {
    Date now = new Date()
    println "\n ***** All completed @ $now  ***"
}

результата с командой ./gradlew classes

> Task :compileJava UP-TO-DATE
> Task :processResources UP-TO-DATE
> Task :classes UP-TO-DATE

BUILD SUCCESSFUL in 0s
2 actionable tasks: 2 up-to-date

 ***** All completed @ Thu Sep 20 21:15:03 CEST 2018  ***

В обоих решениях этот обратный вызов будет выполняться независимо от выполняемой задачи ( сборка gradle , очистка gradle , * сборка gradle **, ..)

0 голосов
/ 20 сентября 2018

вам нужно завершить assembleDebug и assembleRelease (или как бы они ни назывались):

task finalizeBuild {
    doLast {
        println(":finalizeBuild > doLast")
    }
}

tasks.whenTaskAdded { task ->
    if (task.name == 'assembleDebug' || task.name == 'assembleRelease') {
        task.finalizedBy finalizeBuild
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...