문제

꽤 핵심적이고 분명한 것을 간과하고 있는 것 같지만 모든 작업/대상에 대해 항상 실행되는 작업을 어떻게 만들 수 있습니까?

다음과 같이 할 수 있습니다.

task someTask << {
    println "I sometimes run"
}
println "I always run"

그러나 작업에서 항상 실행되는 부분을 갖는 것이 훨씬 더 바람직할 것입니다.

내가 본 가장 가까운 것은 다음과 같습니다.

task someTask << {
    println "I sometimes run"
}

println "I always run"

void helloThing() {
    println "I always run too. Hello?"
}

helloThing()

따라서 메서드를 사용하는 것은 '괜찮은' 솔루션이지만 작업을 구체적으로 지정/재사용하는 방법이 있기를 바랐습니다.

누군가가 이것을 할 수 있는 방법이 있기를 바랍니다.:)

도움이 되었습니까?

해결책

목표가 시스템 정보를 인쇄하는 것이라고 가정하면 항상 구성 단계(작업 선언 외부)에서 정보를 인쇄하고 더미 작업을 가질 수 있습니다. systemStatus 그것은 아무 일도 하지 않습니다(왜냐하면 정보는 어쨌든 인쇄되기 때문입니다).또는 일반 작업으로 구현하고 다음을 추가하여 작업이 항상 실행되도록 할 수 있습니다. ":systemStatus" 첫 번째 항목으로 gradle.startParameter.taskNames (문자열 목록), 누군가가 항상 입력하는 것을 시뮬레이션합니다. gradle :systemStatus ....또는 다음과 같은 후크를 활용할 수도 있습니다. gradle.projectsLoaded { ... } 거기에 정보를 인쇄합니다.

다른 팁

주어진 빌드의 모든 프로젝트의 모든 작업에 대한 클로저를 첨부합니다.

def someClosure = { task ->
  println "task executed: $task"
}

allprojects {
  afterEvaluate {
    for(def task in it.tasks)
      task << someClosure
  }
}
.

빌드 당 한 번만 빌드 당 한 번만 호출되면 모든 프로젝트의 모든 작업을 사용하려면 다음을 사용하십시오.

task('MyTask') << {
  println 'Pre-build hook!'
}

allprojects {
  afterEvaluate {
    for(def task in it.tasks)
      if(task != rootProject.tasks.MyTask)
        task.dependsOn rootProject.tasks.MyTask
  }
}
.

빌드 당 한 번만 빌드 당 한 번만 호출되면 모든 프로젝트의 모든 작업을 사용하려면 다음을 사용하십시오.

task('MyTask') << {
  println 'Post-build hook!'
}

allprojects {
  afterEvaluate {
    for(def task in it.tasks)
      if(task != rootProject.tasks.MyTask)
        task.finalizedBy rootProject.tasks.MyTask
  }
}
.

What's wrong with invoking it straight from the root build.gradle?

task init << {
    println "I always run"
}

tasks.init.execute()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top