Как перевести синтаксис DSL в синтаксис - PullRequest
0 голосов
/ 19 марта 2020

Ниже приведен фрагмент кода в groovy DSL:

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

, который мне трудно понять, если ниже приведен соответствующий синтаксис сценария:

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

Как перевести синтаксис DSL в синтаксис? Потому что скриптовый синтаксис для меня более читаемый синтаксис.

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Метод id(String) в блоке plugins возвращает PluginDependencySpecImpl , который имеет методы version(String) и apply(boolean). Так что вам просто нужно написать это так:

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

Шаблон на работе называется Командная цепь .

Groovy позволяет опустить скобки вокруг аргументов вызова метода для операторов верхнего уровня. Функция «командная цепочка» расширяет это, позволяя нам связывать такие вызовы методов без скобок, не требуя ни круглых скобок вокруг аргументов, ни точек между цепочечными вызовами. Общая идея заключается в том, что вызов, подобный ab c d, фактически будет эквивалентен a (b). c (d). Это также работает с несколькими аргументами, аргументами замыкания и даже именованными аргументами.

У MrHaki есть хорошее объяснение, почему это работает здесь .

0 голосов
/ 19 марта 2020

Подключаемые модули DSL - это предпочтительный подход к применению подключаемых модулей.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

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"

Это намного * на 1013 * больше, чем писать плагины DSL.

Команда Gradle задокументировала это как legacy . Итак, нравится ли вам новый синтаксис plugins { } или нет, старый метод в конечном итоге исчезнет go.

...