有没有一种方法来分解/分解Gradle构build的公共部分

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

  1. 将主构build文件拆分为更小的文件的一种方法
  2. 在其他独立构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

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