Gradle 仅当任务的条件不起作用时才使用渐变

Gradle 仅当任务的条件不起作用时才使用渐变,gradle,groovy,Gradle,Groovy,我正在尝试仅在设置环境变量时运行gradle任务。我发现这个onlyIf函数在 所以我写了这个 task onlyRunIfItIsCI() { println System.env['CI'] onlyIf { System.env['CI'] == "true" } } 但是,不管我是否设置了CI,它仍然可以运行。我错过了什么吗?显然在Gradle中,它有两个执行过程,第一个是配置,第二个是执行 无论onlyIf,配置都将运行。为

我正在尝试仅在设置环境变量时运行gradle任务。我发现这个
onlyIf
函数在

所以我写了这个

task onlyRunIfItIsCI() {
    println System.env['CI']
    onlyIf {
        System.env['CI'] == "true"
    }
}

但是,不管我是否设置了
CI
,它仍然可以运行。我错过了什么吗?

显然在Gradle中,它有两个执行过程,第一个是配置,第二个是执行

无论
onlyIf
,配置都将运行。为确保
onlyIf
有效,我们应将公共执行包装在特定于梯度的范围内,例如
doFirst
doLast

task onlyRunIfItIsCI() {
    doFirst {
        println System.env['CI']
    }
    doLast {
        println System.env['CI']
    }
    onlyIf {
        System.env['CI'] == "true"
    }
}

clean.dependsOn onlyRunIfItIsCI
请注意,对于实际执行,我们需要使用它
dependsOn

另一个例子是
from
into
是特定于梯度的命令,在配置过程中不会运行该命令

task copyPreCommitToGitHook(type: Copy) {
    from new File(rootProject.rootDir, 'storage/pre-commit')
    into { new File(rootProject.rootDir, '.git/hooks') }
    onlyIf {
        System.env['CI'] == null
    }
}

tasks.getByPath(':app:preBuild').dependsOn copyPreCommitToGitHook

您确定任务已实际运行吗?请注意,无论任务是否运行,您的
println
语句都将在配置阶段执行。查看Gradle输出的任务结果。你是对的@LukasKörfer。我不知道有配置阶段,并看到打印发生。现在我明白了,这只是一个配置,像打印这样的常见操作仍然会发生。