Gradle Can';t禁用WriteProperties任务

Gradle Can';t禁用WriteProperties任务,gradle,groovy,build.gradle,Gradle,Groovy,Build.gradle,只有当存在两个环境变量时,我才需要编写属性文件。我的用例是,如果我正在运行一个IDE(IntelliJ/Android Studio),这个属性文件是由IDE自动生成的(并且全局环境变量对IDE不可用),但是当从终端编译时,我需要自己生成它 我的问题是,我似乎永远无法禁用该任务。我的任务是: task createLocalProperties(type: WriteProperties) { String sdkDir = System.getenv('ANDROID_HOME')

只有当存在两个环境变量时,我才需要编写属性文件。我的用例是,如果我正在运行一个IDE(IntelliJ/Android Studio),这个属性文件是由IDE自动生成的(并且全局环境变量对IDE不可用),但是当从终端编译时,我需要自己生成它

我的问题是,我似乎永远无法禁用该任务。我的任务是:

task createLocalProperties(type: WriteProperties) {
    String sdkDir = System.getenv('ANDROID_HOME')
    String ndkDir = System.getenv('ANDROID_NDK_HOME')
    File propFile = file('../local.properties')
    project.logger.info('Creating local.properties')
    property('sdk.dir', sdkDir)
    property('ndk.dir', ndkDir)
    setOutputFile(propFile)
    writeProperties()
}
createLocalProperties.onlyIf { !System.getenv('ANDROID_HOME')?.isEmpty() && !System.getenv('ANDROID_NDK_HOME')?.isEmpty() }

onlyIf
中的条件替换为
false
仍将运行任务。设置
createLocalProperties.enabled false
仍将运行该任务。我不确定为什么似乎没有办法阻止此任务运行。

尝试将实际任务作业包装到doLast{…}块中。正如它现在写的,所有的东西都在配置阶段执行,而onlyIf只能在执行阶段有效。@Jk1试过了。当我这样做时,即使onlyIf条件为true,也不会写入属性文件。我的理解是,doLast发生在任务执行之后,因此我的配置太迟了。只有在满足条件时,我才需要配置和运行任务。我可以将整个过程封装在一个if语句中,但我只是想让跳过的文本显示出来,以记录任务是否执行。