gradle - Gradle Jar任务忽略doLast中的destinationDir

标签 gradle jar task

我需要在构建执行阶段执行Jar任务。
我试过了

task ("createJar", type: Jar, dependsOn: "some_task") {
  doLast{
    println ("default destinationDir " + destinationDir)
    destinationDir file("some_location")
    println ("destinationDir after change" + destinationDir)
    from "some_dir"
  }
}

记录器显示destinationDir的值已更改。但是,当我运行脚本时,它将在默认位置而不是“some_location”中创建Jar。

如果删除“doLast”,那么任务将在配置阶段起作用,并忽略不符合我的需求的dependsOn值。

最佳答案

不要在执行阶段更改配置。这将与最新检查相反,并且您的任务可能在不需要时执行,或者甚至在必要时不执行。除非您完全禁用此任务的最新检查,否则您将禁用Gradle的一大强项。

不要执行doLast,它可以正常工作。如您所述,该任务是而不是在配置阶段运行。在配置阶段仅运行println语句,就像在配置块中一样。实际的任务执行将在您定义的依赖项之后发生。

PS:当然,您必须在doFirst { }中设置配置,而不是doLast { }。顾名思义,doLast { }是在之后所有已存在的任务 Action 之后执行,doFirst { } 之前执行。但是请不要这样做,这很可能不是正确的选择。

关于gradle - Gradle Jar任务忽略doLast中的destinationDir,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41636448/

相关文章:

c# - 重新启动已完成的任务

安卓 :app:transformClassesWithJarMergingForDebug FAILED - ZipException: duplicate entry

r - 在 R 项目中使用 Gradle

gradle - 无法获取未知属性 'publishableFiles'

java - 检查 Maven 版本

java - 在 grails 中创建并发线程/promise

gradle - Gradle 4.0-milestone2 集成测试

spring-boot - 强制 Spring Boot 在 web.xml 中使用 servlet 映射

java - 使用 Java 读取 .jar list 文件

c# - .NET Task 实例能否在运行期间超出范围?