问题是:
这是我的任务代码:
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 ?
我如何实现目标?
答案 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
}
}
有了这个并不重要你测试什么,任何仪器测试都不会给出失败状态