我们有几个独立的构建(每个独立的构建是一个多项目构建)。由于我们有一组被子项目重用的常见任务,主构建脚本已经变得相当庞大。同时,在独立构建之间也存在很多重复。我们正在寻找以下解决方案:
- 将主构建文件拆分为较小的文件。
- 在其他独立构建中重用构建的某些部分。
在Gradle中实现这一点的最佳方法是什么?
Gradle 0.9允许你从另一个构建脚本中导入一个构建脚本。请参考: 使用外部构建脚本配置项目。基本上就是apply from: 'other.gradle'
。
用户指南没有提到的一件事是,'from'参数可以是一个URL,因此你可以将你的共享脚本通过HTTP在某个地方(例如你的子版本库)提供,并从多个构建中导入它们。
我发现的解决方案意味着将您在other.gradle
文件中拥有的内容进行映射。
def getVersionName = { testParam ->
println "${testParam}"
def stdout = new ByteArrayOutputStream()
exec {
commandLine 'git', 'describe', '--tags'
standardOutput = stdout
}
return stdout.toString().trim()
}
ext{
VERConsts = [:]
VERConsts['NAME'] = getVersionName("test param")
VERConsts['NAME_CALL'] = getVersionName
}
然后,在你的build.gradle
文件中:
apply from: 'other.gradle'
// ...
android {
defaultConfig {
versionName VERConsts['NAME_CALL']("test param")
// or
versionName VERConsts['NAME']
}
}
那么,versionName
将拥有调用结果。
注:
VERConsts['NAME'] = getVersionName()
会调用getVersionName()
并存储其结果。在脚本中使用它,例如:versionName VERConsts['NAME']
将分配存储的值。VERConsts['NAME_CALL']
将相反地存储对函数的引用。在您的脚本中使用VERConsts['NAME_CALL']()
将实际调用该函数并将结果分配给您的变量。前者将导致整个脚本分配相同的值,而后者可能会导致不同的值(例如,如果在运行脚本时有人推送另一个版本)。