Java 如何将DSL语法转换为脚本化语法

Java 如何将DSL语法转换为脚本化语法,java,gradle,groovy,dsl,Java,Gradle,Groovy,Dsl,下面是groovy DSL中的代码片段: plugins { id("com.github.johnrengelman.shadow") version "5.2.0" } 这对我来说很难理解,如果下面是相应的脚本语法: plugins({ id( { "com.github.johnrengelman.shadow", version("5.2.0") } ) }) 如何将DSL语法转换为脚本化语法?因为脚本语法对

下面是groovy DSL中的代码片段:

plugins {
  id("com.github.johnrengelman.shadow") version "5.2.0"
}

这对我来说很难理解,如果下面是相应的脚本语法:

plugins({
  id(
      {
        "com.github.johnrengelman.shadow", 
        version("5.2.0")
      }
   )
})

如何将DSL语法转换为脚本化语法?因为脚本语法对我来说更具可读性。

块中的
id(String)
方法返回一个包含
version(String)
apply(boolean)
。所以你只需要这样写:

plugins ({
  id("com.github.johnrengelman.shadow").version("5.2.0")
})
工作模式称为

Groovy允许省略方法调用参数周围的括号 对于顶级语句。“命令链”功能通过以下方式扩展此功能: 允许我们链接这样的无括号方法调用,需要 参数周围没有括号,链表之间也没有点 电话。一般的想法是,像b c d这样的调用实际上是 相当于a(b)、c(d)。这也适用于多个参数, 闭包参数,甚至命名参数

MrHaki对此有很好的解释。

应用插件的首选方法是

等效的(脚本化语法)是:

buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath "com.github.jengelman.gradle.plugins:shadow:5.2.0"
  }
}

apply plugin: "com.github.johnrengelman.shadow"
这比插件DSL要多得多


Gradle团队将此记录为遗产。因此,无论您是否喜欢新的
插件{}
语法,传统方法最终都会消失。

您说的“脚本化语法”是什么意思你是说kotlin脚本而不是groovy脚本吗?@LeonardBrünings此查询具有脚本化语法:因此,只需将多余的括号添加回,并将其称为脚本化语法?@LeonardBrünings是的。。没错,但我不知道如何转换用DSL编写的插件语法(例如,在上面的查询中给出)?你怎么知道
id(“com.github.johnrengelman.shadow”)
版本(“5.2.0”)
之间有点?这是meRead的问题,我从MrHaki链接了解释,看看我添加的链接,然后你会看到。我如何转换完整的脚本?你必须检查每个块,看看它是如何定义的,但老实说,我不推荐它,只是使用文档中的官方语法,否则,你只会给其他人带来困难,你不能举出例子。我不明白你的答案。上面的代码是脚本语法?Gradle有许多新的应用配置的方法。一般来说,较旧的配置方式通常被称为“脚本化”语法。好的……我正在尝试这样编写gradle语法: