从Gradle构build脚本中提取常用方法

我有一个Gradle构build脚本( build.gradle ),其中我创build了一些任务。 这些任务主要由方法调用组成。 被调用的方法也在构build脚本中。

现在,情况如下:

我创build了大量的构build脚本,其中包含不同的任务,但是使用原始脚本中的相同方法。 因此,我想以某种方式提取这些“常用方法”,因此我可以轻松地重复使用它们,而不是为每个创build的新脚本复制它们。

如果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

任何想法如何解决?

共享方法是不可能的,但是可以共享包含闭包的额外属性,归结为相同的东西。 例如,在common-methods.gradle声明ext.foo = { ... } ,使用apply from:来应用脚本,然后用foo()调用闭包。

基于彼得的答案 ,这是我如何导出我的方法:

helpers/common-methods.gradle内容helpers/common-methods.gradle

 // Define methods as usual def commonMethod1(param) { return true } def commonMethod2(param) { return true } // Export methods by turning them into closures ext { commonMethod1 = this.&commonMethod1 otherNameForMethod2 = this.&commonMethod2 } 

这就是我如何在另一个脚本中使用这些方法:

 // Use double-quotes, otherwise $ won't work apply from: "$rootDir/helpers/common-methods.gradle" // You can also use URLs //apply from: "https://bitbucket.org/mb/build_scripts/raw/master/common-methods.gradle" task myBuildTask { def myVar = commonMethod1("parameter1") otherNameForMethod2(myVar) } 

这里更多的将方法转换为Groovy中的闭包: 链接