在gradle 3.3中执行任务的顺序错误

时间:2017-02-08 20:30:02

标签: gradle build.gradle gradle-task

我想在我的脚本文件中定义方法,并使用它们为每个项目个体(自定义库)定义构建任务。

ext.buildDockerImage = { imageName ->

    def distDir = "${getProject().getBuildDir()}/docker"
    copy {
        from "${project.getProjectDir()}/src/docker/"
        into distDir
    }
    println 'Build docker image'
}

在我的项目build.gradle中,我创建了一项任务:

apply plugin: "war"
apply plugin: "jacoco"

dependency {
  // all dependencies
}

task buildDocker() {
    apply from: "${project.getRootDir()}/docker/scripts.gradle"
    buildDockerImage("admin")
}

问题在于,每当我运行gradle build时,此任务也会执行:

 $ gradle build -xtest
Build docker image
# rest of build

如您所见,我想要的只是创建一个自定义库来保存方法,用于为每个项目创建任务。但是目前我无法在不破坏构建的情况下导入这些方法。方法buildDockerImage仅在将war文件添加到构建目录后才能工作,因此该任务必须仅按需执行,我不希望一直包含在该过程中。

我的问题:

  • 如何让我的任务仅在我手动执行任务时运行
  • 为什么,当我执行构建时,脚本首先执行?

1 个答案:

答案 0 :(得分:1)

您的任务buildDocker()定义了配置阶段的所有内容。因此,当您运行gradle构建时,它将始终运行。

task buildDocker() {
    apply from: "${project.getRootDir()}/docker/scripts.gradle"
    buildDockerImage("admin")
}

如果要将此任务作为独立任务运行,请在任务的执行阶段定义您的资料。类似下面的内容

task buildDocker() {
  apply from: "${project.getRootDir()}/docker/scripts.gradle"
  doLast{
    buildDockerImage("admin")
  }
}

Read This article

这可能会有所帮助