代码之家  ›  专栏  ›  技术社区  ›  Andrey Adamovich

有没有一种方法可以分解/分解渐变构建的公共部分?

  •  44
  • Andrey Adamovich  · 技术社区  · 16 年前

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

    1. 拆分主生成文件的方法 变成更小的文件
    2. 一种重用 内置其他独立版本

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

    2 回复  |  直到 9 年前
        1
  •  48
  •   Jarekczek    9 年前

    Gradle0.9允许您从另一个生成脚本导入生成脚本。看一看: Configuring the project using an external build script . 基本上是 apply from: 'other.gradle' .

    《用户指南》没有提到的一件事是,“from”参数可以是一个URL,因此您可以通过HTTP在某处(如Subversion知识库)使共享脚本可用,并从多个版本导入它们。

        2
  •  27
  •   Laur Ivan    9 年前

    我发现的解决方案意味着映射您的 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']() 在脚本中,将实际调用函数并将结果赋给变量

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

    推荐文章