有没有一种方法来分解/分解Gradle构build的公共部分
我们有几个独立的构build(每个独立构build是一个多项目构build)。 主要的构build脚本变得相当大,因为我们有一些子项目重用的常见任务,以及独立构build之间有很多重复。 我们正在寻找的是:
- 将主构build文件拆分为更小的文件的一种方法
- 在其他独立构build中重用构build的某些部分的方法
在Gradle中实现这个的最好方法是什么?
Gradle 0.9允许你从另一个构build脚本导入构build脚本。 看看: 使用外部构build脚本configuration项目 。 基本上它apply from: 'other.gradle'
。
用户指南没有提到的一点是,'from'参数可以是一个URL,所以你可以通过HTTP将你的共享脚本(例如你的Subversion版本库)提供给你,并且可以从多个版本中导入它们。
我find的解决scheme意味着映射你的其他other.gradle
文件中的东西。
def getVersionName = { -> def stdout = new ByteArrayOutputStream() exec { commandLine 'git', 'describe', '--tags' standardOutput = stdout } return stdout.toString().trim() } ext{ VERConsts = [:] VERConsts['NAME'] = getVersionName() VERConsts['NAME_CALL'] = getVersionName }
然后,在你的build.gradle
文件中:
apply from: 'other.gradle' // ... android { defaultConfig { versionName VERConsts['NAME_CALL']() // or versionName VERConsts['NAME'] } }
然后, versionName
将会有调用结果。
备注 :
-
VERConsts['NAME'] = getVersionName()
将调用getVersionName()
并存储其结果。 在脚本中使用它,例如versionName VERConsts['NAME']
将分配存储的值。 -
VERConsts['NAME_CALL']
将存储对该函数的引用。 在脚本中使用VERConsts['NAME_CALL']()
将实际调用函数并将结果赋值给variables
前者将导致在脚本中分配相同的值,而后者可能会导致不同的值(例如,如果有人在脚本运行时推送另一个版本)。