61

我们有几个独立的构建(每个独立构建都是一个多项目构建)。主要构建脚本变得相当大,因为我们有一组由子项目重用的常见任务,并且独立构建之间有很多重复。我们正在寻找的是:

  1. 一种将主构建文件拆分为较小文件的方法
  2. 一种在其他独立构建中重用构建的某些部分的方法

在 Gradle 中实现这一目标的最佳方法是什么?

4

2 回答 2

75

Gradle 0.9 允许您从另一个构建脚本导入构建脚本。看看:使用外部构建脚本配置项目。基本上就是apply from: 'other.gradle'

用户指南没有提到的一件事是'from' 参数可以是一个 URL,因此您可以通过 HTTP 在某处(例如您的 subversion 存储库)使您的共享脚本可用,并从多个构建中导入它们。

于 2010-04-05T07:38:19.173 回答
39

我找到的解决方案意味着映射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']()实际上会调用该函数并将结果分配给您的变量

前者将导致在整个脚本中分配相同的值,而后者可能会导致不同的值(例如,如果有人在您的脚本运行时推送另一个版本)。

于 2014-11-30T23:40:45.037 回答