【发布时间】:2013-09-13 22:33:27
【问题描述】:
我有一个 Gradle 构建脚本 (build.gradle),我在其中创建了一些任务。这些任务主要由方法调用组成。调用的方法也在构建脚本中。
现在,情况如下:
我正在创建大量构建脚本,其中包含不同的任务,但使用原始脚本中的相同方法。因此,我想以某种方式提取这些“常用方法”,这样我就可以轻松地重复使用它们,而不是为我创建的每个新脚本复制它们。
如果 Gradle 是 PHP,那么以下内容将是理想的:
//script content
...
require("common-methods.gradle");
...
//more script content
当然,这是不可能的。还是这样?
无论如何,我怎样才能达到这个结果?最好的方法是什么?我已经阅读了 Gradle 文档,但我似乎无法确定哪种方法最简单且最适合。
提前致谢!
更新:
我已经设法将方法提取到另一个文件中
(使用apply from: 'common-methods.gradle'),
所以结构如下:
parent/
/build.gradle // The original build script
/common-methods.gradle // The extracted methods
/gradle.properties // Properties used by the build script
从build.gradle 执行任务后,我遇到了一个新问题:显然,方法在common-methods.gradle 中时无法被识别。
关于如何解决这个问题的任何想法?
【问题讨论】:
-
你确定你需要编写方法吗?如果您根据方法编写构建脚本,您将错过一些 Gradle 好东西,最重要的是,要使增量构建正常工作需要额外的工作。预期的抽象是使用和重用Tasks。您也可以创建custom tasks。也许您应该考虑将您现在在方法中的实现放入任务中。
-
@Alpar 和 其他人;将
timestamp()或currentWorkingDirectory()方法设置为task-s(例如)的目的是什么。实用函数和类似的东西名义上是标量的——它们不会是任务,除非 Gradle 和大多数构建系统内置的代码重用存在限制。我喜欢 DRY 的世界,我可以一次制作一件东西并重复使用它。事实上,扩展@Pieter VDE 的示例我还为我的父项目使用了“root.gradle”模式——build.gradle 文件通常定义了一些项目细节,然后只是apply ${ROOT}... -
如果您需要一种集中的方式来处理属性,也许这个问题可以帮助您:stackoverflow.com/questions/60251228/…
标签: gradle build.gradle