如何在另一个任务之后运行gradle任务,甚至最后一个任务都有失败的依赖

时间:2016-03-17 13:59:25

标签: android gradle

问题是:

  1. 有一个Android应用程序。我想执行android检测测试(gradle任务是 connectedCheck )。
  2. 我想在浏览器中打开生成的报告,无论测试是否成功。
  3. 这是我的任务代码:

    task showReportInBrowser << {
        String resultsPath = projectDir.toString().replaceAll("\\\\", '/')
        resultsPath = resultsPath + '/build/reports/androidTests/connected/index.html'
        java.awt.Desktop.desktop.browse resultsPath.toURI()
    }
    

    我试过这个:

    connectedCheck.finalizedBy showReportInBrowser
    

    如果 connectedCheck 正常执行,我会得到我想要的。 但如果 connectedCheck 失败,我的 showReportInBrowser 就无法执行。

    我认为这是因为 connectedCheck 任务取决于 connectedDebugAndroidTest 任务,该任务在执行时失败,因此 connectedCheck 甚至不会t start,我的 showReportInBrowser 也不会启动。

    所以我尝试了这个:

    connectedDebugAndroidTest.finalizedBy showReportInBrowser
    

    但gradle说:错误:(75,0)无法在项目':app'上找到属性'connectedDebugAndroidTest'。 打开文件

    我不明白:为什么 connectedCheck connectedDebugAndroidTest 都显示在gradle 验证组中,但我可以在我的buildscript中使用只有 connectedCheck

    我如何实现目标?

2 个答案:

答案 0 :(得分:0)

在我的情况下,失败发生在connectedDebugAndroidTest任务中。因此,要忽略特定子任务中的所有失败,只需使用类似的东西:

connectedDebugAndroidTest {
    ignoreFailures = true
}

但在这种情况下会导致

  

错误:(66,0)未找到Gradle DSL方法:'connectedDebugAndroidTest()'

如图here所示,您可以使用以下旁路:

project.gradle.taskGraph.whenReady {
    connectedDebugAndroidTest {
        ignoreFailures = true
    }
}

答案 1 :(得分:0)

如果您更改构建类型/名称和/或添加更多名称,我将提供更通用的方式

project.gradle.taskGraph.whenReady {
    -> project.tasks.findAll { it.name =~ /connected.+AndroidTest/ }.each {
        it.ignoreFailures = true
    }
}

有了这个并不重要你测试什么,任何仪器测试都不会给出失败状态