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

问题描述 投票:0回答:2

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

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

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

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

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

java gradle groovy dsl
2个回答
1
投票

id(String)块中的plugins方法将返回具有方法PluginDependencySpecImplversion(String)apply(boolean)。所以你只需要这样写:

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

工作中的模式称为Command Chain

Groovy可让您省略方法调用参数周围的括号用于顶级语句。 “命令链”功能将其扩展为允许我们链接此类无括号的方法调用,要求既不要在参数周围加上括号,也不要在链接的点之间加点电话。一般的想法是,像b c d这样的电话实际上是相当于a(b).c(d)。这也适用于多个参数,闭包参数,甚至是命名参数。

MrHaki有一个很好的解释,为什么它会起作用here


0
投票

plugins DSL 应用插件的首选方法。

legacy plugins application(脚本语法)的等效项是:

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团队将其记录为

旧版。因此,无论您是否喜欢新的plugins { }语法,传统方法最终都会消失。

© www.soinside.com 2019 - 2024. All rights reserved.