Gradle任务dependsOn不起作用

art*_*rro 2 gradle

我想在任务之间设置简单的依赖关系.

我的 build.gradle

apply plugin: 'java'

sourceCompatibility = 1.8
version = '1.0'

repositories {
    mavenCentral()
}

task('Second', dependsOn: 'First') {
    println "Second"
}

task('First') {
    println "First"
}
Run Code Online (Sandbox Code Playgroud)

因此,我期待First和比Second.但我有:

$ gradle build
Second
First
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:jar UP-TO-DATE
:assemble UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:check UP-TO-DATE
:build UP-TO-DATE
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?感谢帮助.

Opa*_*pal 11

仍然是同样的错误..你正处于配置阶段.向任务添加操作,一切都会好的.这将有效:

apply plugin: 'java'

sourceCompatibility = 1.8
version = '1.0'

repositories {
    mavenCentral()
}

task('Second', dependsOn: 'First') << {
    println "Second"
}

task('First') << {
    println "First"
}
Run Code Online (Sandbox Code Playgroud)

这是一个配置阶段:

task t1 {
   println "t1"
}
Run Code Online (Sandbox Code Playgroud)

配置阶段的代码在操作之前执行.使用<<(leftShift)运算符完成添加操作.

task t1 << {
   println "t1"
}
Run Code Online (Sandbox Code Playgroud)

是文档.

<<只是重写了运算符do doLast方法.没有它,它将是:

apply plugin: 'java'

sourceCompatibility = 1.8
version = '1.0'

repositories {
    mavenCentral()
}

task('Second', dependsOn: 'First') {
   doLast {
      println "Second"
   }
}

task('First') {
   doLast {
      println "First"
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 我建议总是使用`doLast`而不是`<<`.前者允许组合配置和添加任务操作,并且更不容易出错. (2认同)