在gradle构建脚本的构建阶段之后,如何遍历目录树,找到jar文件并将其复制到单个目录

在gradle构建脚本的构建阶段之后,如何遍历目录树,找到jar文件并将其复制到单个目录,gradle,Gradle,我们的项目包含多个模块,每个模块都是独立构建的,jar文件放在每个模块的build/libs目录中。为了将它们部署到我们的远程位置,有必要将每个模块的/build/libs目录中的所有jar文件收集(复制)到一个目录中。我创建了一个复制任务,希望from子句能够接受通配符,但我错了。现在我将手动将模块添加到from子句中,但显然必须有更好的解决方案。作为gradle脚本的新手,我非常感谢任何帮助。在gradle中有不同的解决方案来实现这一点,一种简单的方法是使用子项目闭包,以便在复制任务中配置f

我们的项目包含多个模块,每个模块都是独立构建的,jar文件放在每个模块的build/libs目录中。为了将它们部署到我们的远程位置,有必要将每个模块的/build/libs目录中的所有jar文件收集(复制)到一个目录中。我创建了一个复制任务,希望from子句能够接受通配符,但我错了。现在我将手动将模块添加到from子句中,但显然必须有更好的解决方案。作为gradle脚本的新手,我非常感谢任何帮助。

在gradle中有不同的解决方案来实现这一点,一种简单的方法是使用
子项目
闭包,以便在复制任务中配置
from
子句:

// a task which collects all jar files produced by the subprojects
task "collectAllJars"(type: Copy) {
    // destination directory in parent root project
    into file("$buildDir/collectedJars")

    // loop over subprojects and include there produced jars
    subprojects.each { sp ->
        from ("$sp.buildDir/libs"){
            include "*.jar"
        }
    }
}

您需要在该
collectAllJars
任务和子项目中的其他
build
任务之间创建所需的依赖项。

非常感谢。它起作用了。我只想问你,你是否可以让我参考一些文件或手册,其中有解释。我在gradle文档中找不到它。对于
子项目
闭包,您可以参考Project DSL reference(),它是文档中非常好的入口点,因为它描述了可以直接在构建脚本中使用的API。您还应该查看Groovy闭包文档():Gradle Groovy DSL正在广泛使用闭包concep。再次感谢,它非常快速而且有用。