apply plugin: 'java'
task taskA <<{
println 'task A'
}
task taskB (type:P){
namee='B'
}
task taskC (type:P){
namee='C'
}
@ParallelizableTask
class P extends DefaultTask {
String namee
@TaskAction
def broccoliBuild() {
println "Task "+namee
}
}
task taskBC (dependsOn:['taskB','taskC'])<<{
println 'BC'
}
taskBC.mustRunAfter taskA
task taskD <<{
println'task D'
}
taskD.mustRunAfter taskBC
task taskE (type:Qtask){
nname='E'
}
task taskF (type:Qtask){
nname='F'
}
@ParallelizableTask
class Qtask extends DefaultTask {
String nname
@TaskAction
def broccoliBuild() {
println "Task "+nname
}
}
task taskEF (dependsOn:['taskE','taskF'])<<{
println 'task EF'
}
taskEF.mustRunAfter taskD
task main(dependsOn: ['taskA','taskBC','taskD','taskEF'])<<{
println 'Build Completed'
}
当我以并行模式执行主任务时:
gradle main --parallel -Dorg.gradle.parallel.intra = true
taskEF
与taskBC
一起执行(两者都是并行任务),违反了我提到的流程。 taskD
必须在taskEF
之前执行(我已经使用过mustRunAfter)。
任何人都可以帮助我解决这个问题。 (使用Gradle 2.12)
答案 0 :(得分:0)
在您的build.gradle
文件的内容之后添加wrapper
任务:
task wrapper(type: Wrapper) {
gradleVersion = '2.12'
}
我运行了以下命令:gradlew wrapper
然后检查了版本,显示我正在运行预期的 Gradle 2.12 版本
E:\Data\Test>gradlew --version
------------------------------------------------------------
Gradle 2.12
------------------------------------------------------------
Build time: 2016-03-14 08:32:03 UTC
Build number: none
Revision: b29fbb64ad6b068cb3f05f7e40dc670472129bc0
Groovy: 2.4.4
Ant: Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM: 1.8.0_111 (Oracle Corporation 25.111-b14)
OS: Windows 10 10.0 amd64
然后,运行您提供的命令,结果如下:
E:\Data\Test>gradlew main --parallel -Dorg.gradle.parallel.intra=true
Parallel execution is an incubating feature.
:taskA
task A
:taskB
:taskC
:taskE
:taskF
Task C
Task B
Task F
Task E
:taskBC
BC
:taskD
task D
:taskEF
task EF
:main
Build Completed
BUILD SUCCESSFUL
Total time: 2.609 secs
因此,使用Gradle 2.12
输出会按预期运行,而taskEF
会在taskBC
之后正确运行。
您似乎没有运行您想要的正确Gradle版本,或者您实际运行的build.gradle
版本与您在此处提供的版本不同。
作为旁注:我建议总是使用我所示的包装器任务运行Gradle,这样可以快速更新或选择特定的Gradle版本。