如果添加为依赖项,则不执行Gradle任务

时间:2016-12-26 14:59:28

标签: gradle build.gradle

我的build.gradle文件中有两个gradle任务,一个用于存档文件夹,另一个用于将其推送到远程服务器。

task tarTask(type: Exec) {
    commandLine 'tar', '-czf', 'javadocs.tgz', 'javadocs/'
}

如果我单独使用gradle tarTask执行tarTask并注释掉publish任务,则构建成功。 我将此任务用作发布任务中的依赖项。

task publish(dependsOn: tarTask) {
    ssh.run {
        settings {
            knownHosts = allowAnyHosts
            fileTransfer = 'scp'
        }

        session(remotes.webServer) {
            from: 'javadocs.tgz', into: 'publishingHouse/'
        }
    }
}

但是当我执行gradle publish时,它无法说明如果执行上一个任务,它就无法找到应该创建的tgz文件。

  

java.io.FileNotFoundException:javadocs.tgz

刚开始学习我并不确定我在这里缺少什么。关于我能做什么的任何想法?

1 个答案:

答案 0 :(得分:2)

我认为原因是在执行任务的阶段。 tarTask在配置阶段配置,并将在执行阶段执行。

同时publish任务在执行阶段没有任何行为要执行,但在配置期间要执行ssh.run

这意味着,当您运行gradle publish时,您在复制tar-archive的逻辑将在配置阶段执行,而tar-archive尚未存在(它将在执行阶段稍后创建)。 / p>

要在执行阶段执行副本,您只需将<<添加到publish任务声明中,如下所示:

task publish(dependsOn: tarTask) << {
    ssh.run {
        settings {
            knownHosts = allowAnyHosts
            fileTransfer = 'scp'
        }

        session(remotes.webServer) {
            from: 'javadocs.tgz', into: 'publishingHouse/'
        }
    }
}

注意,<<doLast相同,并且在执行阶段将关闭闭包。您可以阅读有关Gradle构建生命周期here

的信息
相关问题