27

我有以下 JobDSL 规范:

job {
  steps {
    gradle('generateLock saveLock', '-PdependencyLock.includeTransitives=true', true) { node ->
      node / wrapperScript('${NEBULA_HOME}/gradlew')
    }
    gradle('check', '', true) { node ->
      node / wrapperScript('${NEBULA_HOME}/gradlew')
    }
  }
}

我想将通用代码重构为一个函数:

def gradlew(String tasks, String options) {
  gradle(tasks, options, true) { node ->
    node / wrapperScript('${NEBULA_HOME}/gradlew')
  }
}

但是从gradle函数内部看不到该gradlew函数。这样做的正确方法是什么?

4

1 回答 1

38

花括号形成一个 Groovy 闭包。每个闭包都有一个委托对象,方法调用指向该委托对象。并且可以通过委托属性访问委托。您可以将该委托传递给辅助函数以访问它的方法。

def gradlew(def context, String tasks, String options = '') {
  context.gradle(tasks, options, true) { node ->
    node / wrapperScript('${NEBULA_HOME}/gradlew')
  }
}
job {
  steps {
    gradlew(delegate, 'generateLock saveLock', '-PdependencyLock.includeTransitives=true')
    gradlew(delegate, 'check')
  }
}
于 2015-01-13T21:53:32.760 回答