Как создать и использовать функцию фабрики задач Gradle - PullRequest
0 голосов
/ 04 февраля 2020

Как мне создать функцию, которая создает функцию, или, может быть, я должен попросить ее вызвать

// cant use this method see comment tagged ERROR further down
def webRollbackFactory(parentTask) {
  tasks.create(name: "webRollback.${parentTask.name}", type: Copy, dependsOn: [webBackup]) {
    onlyIf { patentTask.state.failure != null }
    from(zipTree("${webPublishPath}/../${getWebBackupName()}")) { include '*' }
    into webPublishPath
    doLast {
      println "\nwebRollback.${parentTask.name}.doLast"
    }
  }
}

// this task which do the same works with out problems
task webRollback_webPublish(type: Copy) {
  onlyIf { webPublish.state.failure != null }
  from(zipTree("${webPublishPath}/../${getWebBackupName()}")) { include '*' }
  into webPublishPath
  doLast {
    println "\nwebRollback.webPublish.doLast"
  }
}

task webPublish(type: com.ullink.Msbuild) {
  dependsOn msbuild, webBackup
  projectFile = "${webPublishProjectDir}/${webPublishProjectFileName}"
  targets = ['Publish']
  parameters = [PublishProfile: webPublishProfile]
  configuration = BUILD_TYPE
  parameters.maxcpucount
  doLast {
    println '\nwebPublish.doLast'
  }

  // ERROR: fails with: Could not find method webRollbackFactoy() for arguments [task ':webAccessTest'] on task ':webAccessTest' of type org.gradle.api.tasks.Exec.
  //finalizedBy webRollbackFactory(webPublish)

  // the version that works
  finalizedBy webRollback_webPublish
}

Я на Gradle 4.8

1 Ответ

1 голос
/ 29 апреля 2020

Причина, по которой вы получаете эту ошибку, состоит в том, что оцениваемое замыкание не находит функцию, объявленную в основном файле.

Попробуйте изменить свою функцию на замыкание в качестве ссылки на переменную, и тогда она должна работать. webRollbackFactory = { parentTask -> tasks.create(name: "webRollback.${parentTask.name}", type: Copy, dependsOn: [webBackup]) { onlyIf { patentTask.state.failure != null } from(zipTree("${webPublishPath}/../${getWebBackupName()}")) { include '*' } into webPublishPath doLast { println "\nwebRollback.${parentTask.name}.doLast" } } }

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