Gradle 配置阶段的渐变和变量变化

Gradle 配置阶段的渐变和变量变化,gradle,Gradle,我有以下简化版本。gradle ext.greeting = "not set" task configHello{ project.greeting = "Hello" doLast{ project.greeting = "I said hello" } } task configGoodbye{ project.greeting = "Goodbye" } task print(dependsOn: configHello){

我有以下简化版本。gradle

ext.greeting = "not set"

task configHello{
    project.greeting = "Hello"
    doLast{
        project.greeting = "I said hello"
    }
}

task configGoodbye{
    project.greeting = "Goodbye"
}

task print(dependsOn: configHello){
    def localString = project.greeting
    doLast{
        println project.greeting
        println localString
    }
}
运行“渐变打印”(gradle print)给出:
:configHello
:打印
我说你好
再见

我想要的是它说的是“你好”。如何以一种好的方式设置localString?还是我走错了方向?现实生活中的场景print任务是JavaExec类型的,但我发现这更容易理解


编辑:或者通过DAG配置打印任务是可行的吗?

嗯,很快就找到了答案。。。诀窍是先利用DOP。工作解决方案: ext.greeting=“未设置”

给出:
:configHello
:打印
我说你好

我说你好

我不太明白你的意思。在执行阶段配置东西通常是一种气味,从多个任务中配置同一属性也是如此。
doFirst
doLast
都会在执行阶段得到评估。谢谢@PeterNiederwieser的评论,我知道。代码,我是说气味。真正的案例是类似于1的东西。JavaExec任务,它可以分解东西。2.有几个任务依赖于在它们之前运行的JavaExec任务。3.这些任务需要根据上下文告诉JavaExec任务以不同的方式执行(不同的模式)。4.我也想独立运行JavaExec,给它一个上下文。也许你有一些提示或链接到关于配置属性@PeterNiederwieser的最佳实践?也许扩展JavaExec的自定义任务是更好的解决方案?不确定“配置属性最佳实践”是什么意思。通常,您应该尽量避免条件配置。例如,每个上下文可以有一个JavaExec任务,而不是一个根据上下文进行不同配置的任务。“您应该尽量避免条件配置”是一个很好的技巧,我一直在寻找@PeterNiederwieser。我还可以看到,这可能很快失去控制,我对干燥的渴望不得不对可维护性进行一些调整。也许还有可读性。
task configHello{
    doLast{
        project.greeting = "I said hello"
    }
}

task configGoodbye{
    project.greeting = "Goodbye"
}

task print(dependsOn: configHello){
    def localString
    doFirst{
        localString = project.greeting
    }
    doLast{
        println project.greeting
        println localString
    }
}