有没有办法拆分/分解 Gradle 构建的常见部分

Posted

技术标签:

【中文标题】有没有办法拆分/分解 Gradle 构建的常见部分【英文标题】:Is there a way to split/factor out common parts of Gradle build 【发布时间】:2011-02-03 17:35:01 【问题描述】:

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

    一种拆分主构建文件的方法 成更小的文件 重用某些部分的方法 构建其他独立构建

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

【问题讨论】:

【参考方案1】:

Gradle 0.9 允许您从另一个构建脚本导入构建脚本。看看:Configuring the project using an external build script。基本上是apply from: 'other.gradle'

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

【讨论】:

感谢您的链接。您认为 0.8 支持该功能吗? 不,这是 0.9 的新功能 apply from: 'other.gradle' 我导入了一个文件,里面有一些常用函数,但是我不能调用函数 @GreenGiant 感谢您的关注 - 这应该可以工作 saulmm.github.io/squeezing-gradle-builds【参考方案2】:

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

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

【讨论】:

我实际上发现这比在项目之间共享构建脚本帮助器方法的其他答案更有用。 这个答案对我最有帮助。谢谢! 你能举个非安卓的例子吗?什么是 versionName VERConsts['NAME_CALL']()?如何在干净的 java gradle 项目中运行它? 我正在尝试使用这个 other.gradle 应用逻辑。有没有办法从作为依赖项拉入的 jar 文件中的资源中包含的“other.gradle”应用?

以上是关于有没有办法拆分/分解 Gradle 构建的常见部分的主要内容,如果未能解决你的问题,请参考以下文章

以实例说明微服务拆分(以SpringCloud+Gradle)

拆分:分解单块系统——《微服务设计》读书笔记

如何在build.gradle之外声明存储库详细信息

有没有办法在新行上拆分逻辑条件?

Flutter - 缓慢的 gradle 构建

Android Gradle 插件Gradle 依赖管理 ⑤ ( dependencies 依赖项拆分 | 依赖组 | 依赖名称 | 依赖版本号 | 动态指定依赖版本号 | 使用命令行查看模块 )