Gradle-将jar复制到另一个文件夹,作为“ jar”任务的一部分

时间:2019-08-13 14:43:50

标签: gradle

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

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

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

查看gradle输出,它仅运行compileJava,processResources,类,然后运行jar。它没有运行copyJarToGenerated。

1 个答案:

答案 0 :(得分:0)

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

因此,您需要自己定义任务依赖项:

jar.finalizedBy copyJarToGenerated

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

build.dependsOn copyJarToGenerated

由于您在任务的方法jar中指定了任务from,因此将其注册为任务输入,因此隐式注册为任务依赖项。因此,您不再需要使用mustRunAfter定义顺序。

您也可以考虑使用任务destinationDirectory的属性jar,而不是完全创建新任务。