Перемещение встроенных задач Gradle работает на ярлыки doLast / встроенных задач - PullRequest
4 голосов
/ 08 января 2011

Я хочу создать простую задачу синхронизации, которая немного изменит ее поведение в зависимости от типа сборки (например, отладка / выпуск), и я использую логическую переменную 'dummy', отклоненную в gradle.taskGraph.whenReady:

gradle.taskGraph.whenReady {taskGraph ->
  dummy = false
  if (taskGraph.hasTask(':dummybuild')) {
    dummy = true
  }
}

Проблема в том, что задача, настроенная следующим образом, имеет область конфигурации, т. Е. До beforeReady, поэтому она не имеет доступа к переменной 'dummy':

task copySkins(type: Sync) {
  from skinsFrom
  into skinsInto
  rename skinsRename
  exclude symbianExclude
  if (!dummy) exclude dummyExclude
}

Сейчас я использую этот обходной путь

task copySkins {
  inputs.dir skinsFrom
  outputs.dir skinsInto

  doLast {
    task skins(type: Sync) {
      from skinsFrom
      into skinsInto
      rename skinsRename
      exclude symbianExclude
      if (!dummy) exclude dummyExclude
    }
    skins.execute()
  }
}

Возможно ли

  1. обнаружение / настройка некоторых свойств сборки в другом месте, кроме случаев, когда готов
  2. перенести работу по синхронизации в doLast
  3. или, по крайней мере, есть ярлык для задачи синхронизации (.execute () выглядит довольно некрасиво)

1 Ответ

2 голосов
/ 14 января 2011

1) whenReady событие позволяет пользователю получить доступ к полностью инициализированному графу задач: вся инициализация завершена, и задачи готовы к запуску. Единственная ситуация, когда вам нужно обнаружить / настроить свойства сборки здесь, это когда вам нужно проанализировать текущие настройки сборки. Если вам не нужна эта информация, вы можете разместить инициализацию в любом месте вашего скрипта сборки. В конце концов, это не что иное, как отличный сценарий.

    apply plugin: 'java'
    def now = new Date()
    compileJava.doFirst {
      println "It is ${now}. We are starting to compile"
    }

2) Вы не можете переместить работу по синхронизации в doLast. Но вы всегда можете добавить свои действия в doFirst;) Думаю, это должно сработать:

task copySkins(type: Sync) {
  from skinsFrom
  into skinsInto
  rename skinsRename
  exclude symbianExclude

  doFirst {
    if (!dummy) exclude dummyExclude
  }
}

3) Учитывая все вышесказанное, отсутствие ярлыка задачи синхронизации не должно быть таким болезненным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...