首页 > 解决方案 > Gradle - 作为“jar”任务的一部分将 jar 复制到另一个文件夹

问题描述

我有一个多项目 gradle 设置。我想在重建 jar 时简单地复制任何项目的生成的 jar 文件,并认为这将在我的根项目的子项目关闭中起作用:

task copyJarToGenerated(type: Copy) {
    from jar
    into "../my-generated-jars/"
}
copyJarToGenerated.mustRunAfter jar

但是,如果我运行任何子项目的“clean”任务然后是“jar”任务,我的 jar 会像往常一样在 build/libs 下生成,但不会被复制。

查看 gradle 输出,它只运行 compileJava、processResources、classes 然后 jar。它没有运行 copyJarToGenerated。

标签: gradle

解决方案


该方法mustRunAfter没有定义任务依赖关系,它只是强制执行特定的顺序。它基本上说“如果两个任务都在构建中执行(无论出于何种原因),那么它们将按指定的顺序执行”。

所以需要自己定义任务依赖:

jar.finalizedBy copyJarToGenerated

您也可以添加copyJarToGenerated作为生命周期任务的依赖项build

build.dependsOn copyJarToGenerated

由于您在任务jar的方法from中指定了任务,因此它被注册为任务输入,因此隐式地注册为任务依赖项。因此,您不再需要定义订单mustRunAfter

你也可以考虑使用destinationDirectory任务的属性jar而不是创建一个新任务。


推荐阅读