gradle - 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。
解决方案
该方法mustRunAfter
没有定义任务依赖关系,它只是强制执行特定的顺序。它基本上说“如果两个任务都在构建中执行(无论出于何种原因),那么它们将按指定的顺序执行”。
所以需要自己定义任务依赖:
jar.finalizedBy copyJarToGenerated
您也可以添加copyJarToGenerated
作为生命周期任务的依赖项build
:
build.dependsOn copyJarToGenerated
由于您在任务jar
的方法from
中指定了任务,因此它被注册为任务输入,因此隐式地注册为任务依赖项。因此,您不再需要定义订单mustRunAfter
。
你也可以考虑使用destinationDirectory
任务的属性jar
而不是创建一个新任务。