gpt4 book ai didi

gradle - 如何解释 Gradle DSL

转载 作者:行者123 更新时间:2023-12-03 08:58:42 26 4
gpt4 key购买 nike

我正在尝试学习 Gradle。我喜欢的学习方式是在低层次上了解正在发生的事情。为此,我试图解释 example 6.1 中发生的事情。关于 DSL reference: 的文档

task hello {
doLast {
println 'Hello world!'
}
}

我知道这个脚本是在 Project 的上下文中执行的。 .所以我可以从 Project 看到 documentation有许多重载 task(...)方法。查看签名,我需要选择一个具有闭包作为最终参数的签名。因为我们没有通过 Map在这里,我假设被调用的方法是 task(String name, Closure closure) .

但是,我正在努力解决的问题是,在这个脚本中,文字字符串 hello被映射到 String .

另一个例子是 example 6.7 :
task taskX(dependsOn: 'taskY') << {
println 'taskX'
}

task taskY << {
println 'taskY'
}

在这里,我假设我们正在调用 task(Map<String, ?> args, String name)方法的形式。但,
  • 同样,文字字符串 taskX最终成为 String ?
  • 鉴于括号不用于构造 Map字面意思,括号中的部分如何最终成为 Map ?
  • 如果我正确地找出了正在调用的方法,那么与 DSL 文档相比,脚本中给出的参数顺序是否错误?
  • 使用括号的语法像方法调用一样查找整个世界。这可能表明对 Project 的委托(delegate)解决对象taskX作为一种未知的方法。但是,AFAIK,鉴于对 task 的方法调用,此时方法调用在语法上无效。紧接在它之前。

  • 正如您所看到的,对于示例语法如何映射到 DSL 引用指南,我有点困惑,这让我很难真正理解基层发生的事情。

    谢谢!

    最佳答案

    这是一个很好的文档:
    https://ouyi.github.io/post/2017/12/09/groovy-gradle.html
    最后写在这里:
    “自定义任务的语法很棘手。例如:

    task myTask(type:Tar, dependsOn anotherTask) {
    // clousre
    }
    我可以弄清楚这可能是调用方法 Task task(Map<String,?> args, String name, Closure configureClosure)在项目对象上定义,但我不知道如何匹配 myTask()使用 name 参数构造。而且我并不孤单,类似的讨论在这里和这里。
    事实证明,Gradle 使用了 Groovy 的一些高级元编程特性(编译时元编程)来转换 myTask()构造到名称参数。老实说,这是 Gradle 中我不喜欢的部分,因为实现那些语法糖似乎太棘手了(而且过多的糖可能不健康)。毕竟,Gradle 只是一个构建工具,应该易于理解、使用和扩展。”

    关于gradle - 如何解释 Gradle DSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12326264/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com