Кажется, что на данный момент "finalizedBy" действительно единственный способ достичь этого:
Учитывайте это
task a {
finalizedBy 'b'
}
task b { ... }
В настоящее время (этап 4.10.2) задача "b" всегда выполняетсяесли «а» находится в графе задач, независимо от того, является ли «а» современным или выполнившим работу.Это противоречит документации для начального уровня, см. Также обсуждение на форуме для начального уровня: finalizedBy задачи запускаются, даже если исходная задача UP-TO-DATE
Если вы хотите задачу "b"чтобы выполнить, только если «a» выполнило некоторую работу, вы должны сделать это явно, например, таким образом
task b {
outputs.upToDateWhen { a.state.upToDate }
}
Другими словами, вы можете понимать «finalizedBy» не так, как «определяет задачу, которая завершается»работа, выполненная этой задачей "(соответствует предложению" finally "в Java), а скорее как способ перенастроить граф задачи" всегда запускать заданную задачу b, если эта задача также выполняется, и всегда запускать b после a ",(В отличие от этого «b.mustRunAfter a» только определяет порядок, но не запускает b, если b в любом случае не находится на графе задач.)
Так что для этого варианта использования выполняются тесты JUnit и TestNG иСоздав единый отчет о тестировании, вы можете сделать это:
// Configure the default task that runs JUnit
test {
finalizedBy 'testNG'
}
// Create another test task that runs the TestNG tests
task testNg(type: Test) {
useTestNG()
finalizedBy 'testReport'
}
// Create a consolidated test report of both JUnit and TestNG tests
task testReport(type: TestReport) {
// This does *not* work:
// reportOn test, testNg
// I guess that's because the testNg task was only executed as part of the "finalizedBy" mechanism
// (and not because of any "dependsOn"). So use "testResultDirs" instead:
testResultDirs = files("$buildDir/test-results/test/binary", "$buildDir/test-results/testNg/binary")
}
Обратите внимание, что функция "finalizedBy" и задача "TestReport" в настоящее время инкубируют
Выполненопример на https://github.com/eekboom/gradle-dual-tests