【发布时间】:2011-02-03 17:35:01
【问题描述】:
我们有几个独立的构建(每个独立构建都是一个多项目构建)。主要构建脚本变得相当大,因为我们有一组由子项目重用的常见任务,并且独立构建之间有很多重复。我们正在寻找的是:
- 一种拆分主构建文件的方法 成更小的文件
- 重用某些部分的方法 构建其他独立构建
在 Gradle 中实现这一目标的最佳方法是什么?
【问题讨论】:
标签: build-process gradle
我们有几个独立的构建(每个独立构建都是一个多项目构建)。主要构建脚本变得相当大,因为我们有一组由子项目重用的常见任务,并且独立构建之间有很多重复。我们正在寻找的是:
在 Gradle 中实现这一目标的最佳方法是什么?
【问题讨论】:
标签: build-process gradle
Gradle 0.9 允许您从另一个构建脚本导入构建脚本。看看:Configuring the project using an external build script。基本上是apply from: 'other.gradle'。
用户指南没有提到的一件事是“from”参数可以是 URL,因此您可以通过 HTTP 在某处(例如您的 subversion 存储库)使您的共享脚本可用,并从多个构建中导入它们。
【讨论】:
apply from: 'other.gradle'
我找到的解决方案意味着映射您在 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']() 实际上会调用该函数并将结果分配给您的变量前者将导致在整个脚本中分配相同的值,而后者可能会导致不同的值(例如,如果有人在您的脚本运行时推送另一个版本)。
【讨论】: