如何在gradle中复制文件?

如何在gradle中复制文件?,gradle,groovy,Gradle,Groovy,我正试图将战争档案部署到Tomcat中。以下是我编写的构建脚本: apply plugin : 'war' task deploy (dependsOn: war){ copy { from "build/libs" into "E:/apache-tomcat-8.0.14/webapps" include "*.war" } } 但它没有效果。webapps的根目录中没有war。渐变输出: :compileJava UP-T

我正试图将战争档案部署到Tomcat中。以下是我编写的构建脚本:

apply plugin : 'war'

task deploy (dependsOn: war){
    copy {
        from "build/libs"
        into "E:/apache-tomcat-8.0.14/webapps"
        include "*.war"
    }
}
但它没有效果。
webapps
的根目录中没有
war
。渐变输出:

:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:war
:deploy
怎么了


请不要向我推荐任何tomcat cargo插件。我只想知道如何修复特定的文件复制任务。

任务中的代码在配置阶段运行,而不是在执行阶段运行。因此,它在战争任务完成之前就运行了。任务应该是这样的

task deploy (dependsOn: war) << {
    ...
}
或者,更好的做法是,不要定义在执行时以命令式方式进行复制的任务,而是将任务设置为复制任务,并对其进行配置:

task deploy (dependsOn: war, type: Copy) {
    from "build/libs"
    into "E:/apache-tomcat-8.0.14/webapps"
    include "*.war"
}

如果需要从单个源复制到多个目标,也可以尝试以下操作:

task deploy (dependsOn: war, type: Copy) {
    // define your multiple directories
    def multipleDest = ["$buildDir/libs/folder1", "$buildDir/libs/folder2", "$buildDir/libs/folder3"]

    // get the output dirs
    multipleDest.each { outputDir ->
        outputs.dir outputDir
    }
    // copy to all of them
    doLast {
        multipleDest.each { outputDir ->
            copy {
                from "$buildDir/*.war"
                into outputDir
            }
        }
    }
}
task deploy (dependsOn: war, type: Copy) {
    // define your multiple directories
    def multipleDest = ["$buildDir/libs/folder1", "$buildDir/libs/folder2", "$buildDir/libs/folder3"]

    // get the output dirs
    multipleDest.each { outputDir ->
        outputs.dir outputDir
    }
    // copy to all of them
    doLast {
        multipleDest.each { outputDir ->
            copy {
                from "$buildDir/*.war"
                into outputDir
            }
        }
    }
}