Как написать абстрактные и производные Gradle Groovy Tasks? - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть несколько вопросов о том, как написать поддерживаемые задачи Groovy Gradle:

  • Как пометить задачу как "абстрактную", чтобы задачи, которые не могут быть запущены из командной строки, для которых требуется производная реализация?

  • Как мне получить задачу?

  • Как я могу «инкапсулировать» переменные? (которые предпочтительно недоступны вне (родительской) задачи).

Например, в этом сценарии псевдо-града, я ожидаю, что только runnableTask будет исполняемым, что приведет к запуску someTask с param = "TEST" и param2 = "SOMETHINGELSE"

Что можно сделать из этого?

***abstract*** task someTask(type: com.bla.ATask) {
    param=someVar1
    param2=someVar2
}

***abstract*** task derivedTESTTask(***extends*** someTask) {
    someVar1="TEST"
}

task runnableTask(***extends**** derivedTESTTask) { 
    someVar2="SOMETHINGELSE"
}

1 Ответ

0 голосов
/ 17 ноября 2018

Если вам нужно создать именно абстрактную задачу с параметрами, вы можете создать класс, расширяя его от DefaultTask и определив ваши параметры:

abstract class AdsTask extends DefaultTask {

  @Input
  def param1

  @Input
  def param2
}

Тогда вам нужно создать его реализацию:

class ConcreteTask extends AdsTask {
  @TaskAction
  void anyNameMethod() {
    // your code
    println "Params $param1 $param2"
  }
}

А затем создайте задачу с конкретными значениями для этих параметров:

task task1(type: ConcreteTask) {
  param1="TEST"
  param2="SOMETHINGELSE"
}

Но вы можете сделать проще:

class ConcreteTask extends DefaultTask {

  @Input
  def param1

  @Input
  def param2

  @TaskAction
  void anyNameMethod() {
    // your code
    println "Params $param1 $param2"
  }
}

task task1(type: ConcreteTask) {
  param1="TEST"
  param2="SOMETHINGELSE"
}
...