我有一个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
中时,它们不会被识别。
这怎么能解决呢?
5条答案
按热度按时间fae0ux8s1#
基于Peter的回答,下面是我导出方法的方式:
helpers/common-methods.gradle
的含量:下面是我在另一个脚本中使用这些方法的方式:
Here's more介绍如何在Groovy中将方法转换为闭包。
ifsvaxew2#
共享方法是不可能的,但是你可以共享包含闭包的额外属性,这归结起来是一样的,例如,在
common-methods.gradle
中声明ext.foo = { ... }
,使用apply from:
应用脚本,然后用foo()
调用闭包。bhmjp9jg3#
使用KotlinDSL,其工作原理如下:
构建版本.gradle.kts:
外部梯度kts:
j8yoct9x4#
我建议对Matthias Braun's answer做一个小小的调整,与其两次编写相同的方法名并保持其清晰和一致,为什么不简单地执行以下操作呢?
as
-运算符的用法只是显式地告诉我们,该函数将返回boolean
-类型的值。因为毕竟,这还是很棒的好事。不错吧?
pbpqsu0x5#
KotlinDSL的另一种方法是:
我的插件.gradle.kts
设置.分级.kts