попытка понять файл gradle

#groovy #build.gradle

#заводной #сборка.сортировка

Вопрос:

Я пытаюсь изменить build.gradle файл существующего проекта, который был передан мне. Я новичок в gradle и groovy, поэтому я пытаюсь точно расшифровать, что он делает. Документация gradle и groovy мне не очень помогает. Вот пример:

 apply plugin: "java" apply plugin: 'idea' apply plugin: 'war' apply plugin: 'org.springframework.boot' apply plugin: 'org.flywaydb.flyway' apply plugin: "net.saliman.cobertura" apply plugin: 'org.sonarqube' apply plugin: 'org.owasp.dependencycheck' apply plugin: 'maven' apply plugin: 'maven-publish' apply plugin: 'io.spring.dependency-management'  // lots of code here....  task('devRun') {  doLast {   bootRun {  systemProperty "spring.profiles.active", "local, dev"  if (System.getenv('DEBUG') == 'true') {  jvmArgs '-Xdebug',  '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5081'  }  }  } }  

Для меня это похоже на несколько определений вложенного замыкания, что означает task внешнее замыкание, doLast внутреннее замыкание, bootRun дальнейшее внутреннее замыкание. Но разве заводные замыкания формы {statement...} не label {statement...} являются таковыми . Также не являются ли все эти ключевые слова (task, doLast, bootRun) ключевыми словами или предопределенными задачами других плагинов? Если это так, то что на самом деле означает сказать doLast {statement...} или bootRun {statement...} ? это похоже на переопределение предопределенного doLast ? и то же самое для bootRun . Я не нахожу в документации ни одного примера, который был бы похож на этот фрагмент кода. Не мог бы кто-нибудь объяснить, пожалуйста, какие правила синтаксиса groovy применяются здесь?

Комментарии:

1. x {} это сокращение от x({}) или даже x() {} . Родители (в основном опциональные), и окончательному аргументу закрытия разрешается выходить за пределы родителей.

2. ладно, думаю, я понял. чтобы убедиться, что я понимаю, в случае task , если я интерпретирую, что предопределенный task метод вызывается с аргументами «devRun», а 2-й аргумент-это замыкание, которое определено встроенным и которое вызывает doLast ? Спасибо