【问题标题】:Wrong order of task execution in gradle 3.3gradle 3.3 中的任务执行顺序错误
【发布时间】:2017-02-09 05:02:16
【问题描述】:

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

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

我的问题:

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

【问题讨论】:

    标签: gradle build.gradle gradle-task


    【解决方案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

    这可能会有所帮助

    【讨论】:

    • 它成功了:) 我非常接近解决方案,谢谢你的帮助:)
    猜你喜欢
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    相关资源
    最近更新 更多