我开始将 Gradle 用于 Android 应用程序。如果开发人员未能在特定位置(例如
./src/res/values/specialfile.xml
)创建文件,我希望构建失败
一点搜索让我相信
.doFirst
会起作用
android.doFirst {
assert file("./src/res/values/specialfile.txt").exists()
}
但是,Gradle 说 “发现不支持的 Gradle DSL 方法:'doFirst()'!”
我可以做什么来断言文件的存在?
doFirst 仅存在于任务对象上。
android
不是一项任务。
如果希望即使开发人员不尝试构建(例如运行
tasks
任务时)也始终完成此测试,您应该简单地输入 build.gradle
assert file("./src/res/values/specialfile.txt").exists()
但是,确实不建议这样做,因为即使对于非构建任务,或者甚至在为 IDE 集成构建模型时也会执行此操作。
有一个名为
preBuild
的任务在 Android 构建中的任何内容之前执行,因此您可以通过另一个任务或通过 doFirst
: 将测试挂钩到它
preBuild.doFirst {
assert file("./src/res/values/specialfile.txt").exists()
}
有人可能想要签入模块
build.gradle
...
plugins
配置块。android
配置块。或者甚至已经在根项目中
build.gradle
...
buildscript
或plugins
配置块。例如。以确定要应用哪些 Gradle 插件:
plugins {
id "com.android.application"
}
def json_google = "src/google-services.json";
if (project.file(json_google).exists()) {
println "found: ${project.file(json_google)}"
apply plugin: "com.google.gms.google-services"
apply plugin: "com.google.firebase.crashlytics"
...
} else {
def message = "missing: ${project.file(json_google)}"
// throw new GradleException(message)
println message
}
android { ... }
rootProject.file()
和 project.file()
可能比 file()
更方便(这取决于情况)。使用 assert
似乎有点苛刻 - 但必须注意它不会在其他地方崩溃。
我的项目通常有一些可选的配置文件,环境可能会或可能不会提供这些配置文件,因为并非每个产品风格都可能需要相同的插件和配置文件集。