使用Gradle,如何确保文件存在于某个位置?

问题描述 投票:0回答:2

我开始将 Gradle 用于 Android 应用程序。如果开发人员未能在特定位置(例如

./src/res/values/specialfile.xml

)创建文件,我希望构建失败

一点搜索让我相信

.doFirst
会起作用

android.doFirst { 
    assert file("./src/res/values/specialfile.txt").exists() 
} 

但是,Gradle 说 “发现不支持的 Gradle DSL 方法:'doFirst()'!”

我可以做什么来断言文件的存在?

android gradle android-gradle-plugin
2个回答
58
投票

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() 
} 

5
投票

有人可能想要签入模块

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
似乎有点苛刻 - 但必须注意它不会在其他地方崩溃。

我的项目通常有一些可选的配置文件,环境可能会或可能不会提供这些配置文件,因为并非每个产品风格都可能需要相同的插件和配置文件集。

© www.soinside.com 2019 - 2024. All rights reserved.