1

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

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

我的问题:

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

1 回答 1

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")
  }
}

阅读这篇文章

这可能会有所帮助

于 2017-02-08T21:02:16.153 回答