在摇篮,所有的任务后,我输出时间戳如何完成?(In Gradle, how can I output

2019-10-30 05:13发布

我有一个多项目摇篮项目,并在项目根,我有以下几点:

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 ,时间戳任务运行,但之前的一些其他任务运行。

我怎样才能得到所有其他输出后要打印此时间印记? (我喜欢它直接先于BUILD SUCCESSFUL in ##s在输出中,如果这是可能的)

Answer 1:

如果你只是想在构建结束打印时间戳(执行最后一项任务后),您可以实现如下:

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

    }
}

通过这种方式,您将添加如由摇篮计算任务执行图表确定要执行到最后一个任务的操作。

您还可以使用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这个组合**,..)



Answer 2:

你需要完成assembleDebugassembleRelease (或但是它们也可以称为):

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

tasks.whenTaskAdded { task ->
    if (task.name == 'assembleDebug' || task.name == 'assembleRelease') {
        task.finalizedBy finalizeBuild
    }
}


文章来源: In Gradle, how can I output a timestamp after all tasks are complete?
标签: gradle