如何使gradle中JavaExec任务的类任务依赖于另一个任务?

如何使gradle中JavaExec任务的类任务依赖于另一个任务?,gradle,Gradle,这可能吗?我有点像: task taskB(dependsOn: taskA) { // Do stuff. } task taskA { // Do stuff. } task runClass(dependsOn: 'classes', type: JavaExec) { main = 'com.some.package.MainClass' classpath = some.classpath } sourceSets.main.resources.s

这可能吗?我有点像:

task taskB(dependsOn: taskA) {
    // Do stuff.
}

task taskA {
    // Do stuff.
}

task runClass(dependsOn: 'classes', type: JavaExec) {
    main = 'com.some.package.MainClass'
    classpath = some.classpath
}
sourceSets.main.resources.srcDir "build/taskB" // output dir of taskB
processResources.dependsOn(taskB)
我想在JavaExec任务中的
classes
之前运行
taskB
。我该怎么办?将其更改为
dependsOn:['taskB','classes']
似乎没有帮助——它仍然会先执行
classes

编辑:


添加
classes.dependsOn taskB
似乎奏效了。这是最好的方法吗?

在Gradle中,
foo.dependsOn(bar,baz)
相当于
foo.dependsOn(bar);foo.dependsOn(baz)
。它并不意味着在
bar
baz
之间有任何顺序,就像在Ant中那样(具有软依赖特性)

您能否解释一下
taskB
的功能,以及为什么您认为它需要在
类之前运行

编辑:

根据您在下面的评论,我会这样做:

task taskB(dependsOn: taskA) {
    // Do stuff.
}

task taskA {
    // Do stuff.
}

task runClass(dependsOn: 'classes', type: JavaExec) {
    main = 'com.some.package.MainClass'
    classpath = some.classpath
}
sourceSets.main.resources.srcDir "build/taskB" // output dir of taskB
processResources.dependsOn(taskB)

当然,这可以通过多种方式进行改进,但它基本上是正确的。

taskB
将一些文件复制到源代码树中。实际上,从技术上讲,我需要它在
processResources
之前运行,这实际上是复制资源文件的任务(将文件复制到
taskB
中)。我猜
取决于
进程资源
。。。但是让
processResources
依赖于
taskB
可能更安全。附加上下文:这是一个DropWizard项目,资源中有UI文件
taskB
运行grunt创建UI文件的分发,以复制到DropWizard最终将使用的资源。