我们有几个独立的构建(每个独立构建都是一个多项目构建)。主要构建脚本变得非常大,因为我们有一组子项目重用的常见任务,并且在独立构建之间有很多重复。我们要找的是:
在Gradle中实现这一目标的最佳方法是什么?
答案 0 :(得分:51)
Gradle 0.9允许您从另一个构建脚本导入构建脚本。看看:Configuring the project using an external build script。基本上它是apply from: 'other.gradle'
。
用户指南没有提及的一点是'from'参数可以是一个URL,因此您可以通过HTTP(例如您的subversion存储库)使您的共享脚本可用,并从多个构建中导入它们。 / p>
答案 1 :(得分:28)
我发现的解决方案意味着将您拥有的内容映射到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']()
实际上会调用函数并将结果分配给变量前者将导致在脚本中分配相同的值,而后者可能会导致不同的值(例如,如果有人在您的脚本运行时推送另一个版本)。