使用dependsOn mustRunAfter和doLast进行Gradle任务排序

htrmnn0y  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(93)

我正在创建一个.gradle文件,以便在项目构建期间自动执行一系列手动操作。
我正在尝试使用dependsOnmustRunAfterdoLast强制执行任务排序。但是,我没有得到所需的输出。
这是我的.gradle文件,其中包含一些虚拟任务和打印语句,以显示我所拥有的内容。

tasks.register('setupProjectTasks') {
    println 'Debug 1 sPT'
    dependsOn 'task1'
    doLast {
        exec {
            println 'Run shell script'
            commandLine '/path/a.sh'
        }
    }
}

tasks.register('task1') {
    println 'Debug 2 task'
    dependsOn 'someCleanup'
    dependsOn 'depA'
    tasks.findByName('depA').mustRunAfter('someCleanup')
    doLast {
        println 'restart' // Restart tomcat here
    }
}

tasks.register('someCleanup') {
    println 'Debug 3 some cleanup'
    dependsOn 'subTask1'
    dependsOn 'subTask2'
}

tasks.register('depA') {
    println 'depA'
    dependsOn 'subTaskA1'
    dependsOn 'subTaskA2'
    tasks.findByName('subTaskA2').mustRunAfter('subTaskA1')
    doLast {
        println 'depA done'
    }
}

tasks.register('subTask1') {
    println 'subtask 1'
}

tasks.register('subTask2') {
    println 'subtask 2'
}

tasks.register('subTaskA1') {
    println 'subtask A1'
}

tasks.register('subTaskA2') {
    println 'subtask A2'
}

字符串
这是我希望完成的任务。

- setupProjectTasks
  - task1 (First 'someCleanup', and then 'depA', and 'restart' at the end
    - someCleanup (the order between subTask1 and subTask2 doesn't matter)
    - depA (below should be executed in the exact order)
      - subTaskA1
      - subTaskA2
      - depA done (print line)
    - restart (print line)
  - Run shell script (print line and run shell script)


我总是希望按照指定的顺序运行所有这些任务。我理解dependsOnmustRunAfter是如何工作的。但我似乎没有让他们以正确的方式为我工作。
这是我得到的输出

Debug 1 sPT
Debug 2 task
depA
subtask A2
Debug 3 some cleanup
subtask A1
subtask 1
subtask 2

> Task :depA
depA done

> Task :task1
restart

> Task :setupProjectTasks
Run shell script
Hi


我错过了什么?提前感谢!

svgewumm

svgewumm1#

我想你误解了Gradle和它的任务概念。因为Gradle中的任务不能有层次结构。你也没有能力在另一个任务中运行任务。Gradle中的任务应该做一件小事,或者可能是大事。
也许使用方法而不是任务会更好。
要订购任务,您只需要使用dependsOn。下面是我创建的一个示例,向您展示它如何成为-link

相关问题