gradle 3.3 任务执行顺序错误

Wrong order of task execution in gradle 3.3

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

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文件添加到构建目录后才会起作用,所以这个任务只能按需执行,我不想一直被包含在过程中。

我的问题:

您的任务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

这可能有帮助