从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中的闭包: 链接
- 错误:(1,0)未findGradle DSL方法:'android()'
- 如何/何时生成Gradle包装文件?
- 在intellij IDEA中使用gradle构build获取gradle依赖关系
- 我如何告诉Gradle使用特定的JDK版本?
- 我如何在Android项目中使用外部JAR?
- Dex错误在Android Studio 3.0 Beta4上
- 执行失败的任务':app:compileDebugAidl':aidl缺失
- 如何在所有testing都是UP-TO-DATE时运行Gradletesting?
- 如何将Apache HTTP API(legacy)作为编译时间依赖项添加到Android M的build.grade中?