我的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
刚开始学习我并不确定我在这里缺少什么。关于我能做什么的任何想法?
答案 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