每个子项目的Gradle变更任务?

pn9klfpd  于 6个月前  发布在  其他
关注(0)|答案(1)|浏览(100)

我有一个包含多个子项目的gradle项目。我想定义一个带有默认实现的“准备”任务(例如生成散列,复制文件类型的东西),但有些子项目可能会被更复杂的实现覆盖。
本质上,有些项目更多的是支持性的角色,有些项目包含潜在的可部署性,“准备”的含义取决于子项目。
然而,这种天真的方法在我为所有人定义任务,然后试图在子项目中覆盖它的情况下不起作用,它告诉我任务已经定义了。
以前,有一个tasks.replace()可以完成这项工作,但它已经从Gradle中删除了。现在您如何做同样的工作?

main build.gradle:
subprojects {
   task prep {
      .. some default behavior
   }
}

subproject build.gradle: 
task prep { 
   .. a subproject specific prep behavior
}

字符串

qlzsbp2j

qlzsbp2j1#

修改任务配置

您可以添加和修改现有任务的配置。最简单的方法是编写:

prep {
   // more specific configuration
}

字符串
它是使用Groovy API在prepTask上调用方法Task.configure()的简写。
不幸的是,这确实会触发任务的配置,如果你没有在任何给定的构建上运行prep,这是浪费的。为了保持懒惰,以便只在需要prep时执行配置,你可以写:

tasks.named('prep') {
    // more specific configuration
}

那怎么办?

然后你可以访问的API并不像在类中重写一个方法那样流畅,但是你可以对这个任务做很多事情(docs for Task object):
1.使用doFirstdoLast向基本任务添加其他操作;
1.通过访问、删除和修改actionsList属性对任务操作进行更深层次的更改(例如actions.clear()将删除所有现有的任务操作);
1.更改任务操作所依赖的其他任务属性。这可能需要单独创建或修改定义任务的基础类(将应用于任务的所有示例)(docs)。
因此,要完全替换prep,您可以编写:

prep {
   actions.clear()
   doLast {
      // A new task action
   }
}

相关问题