【问题标题】:How to organize common gradle tasks and extract common code blocks如何组织常用的 gradle 任务并提取常用代码块
【发布时间】:2020-02-21 07:55:15
【问题描述】:

我有一个包含 10 多个库模块的 android 项目。这些模块中的每一个都包含许多所有模块共有的 gradle 代码。例如,我在所有 build.gradle 文件中使用来自 this answer 的 Javadoc 生成任务。

我将如何将该任务创建逻辑提取到一个函数中,该函数放在一个单独的 gradle 文件中,每个模块都可以“包含”该文件?我的所有模块的代码都是相同的,但显然取决于变体和项目。是否可以提取一个以项目为参数并返回该项目任务的函数?

我可能会倒退,因为我真的很讨厌 Gradle,但是任何导致我避免在 10 个不同文件(lib1/build.gradle、lib2/build.gradle、. ..) 会很有帮助!

事实上,更进一步,基本上我的整个 build.gradle 对于所有项目都是相同的,除了依赖项部分 - 有一个带有 buildTypescompileOptions 等的 android 块,应用了一些插件(@ 987654325@等),并设置了一些工件参数。事实上,只有我的依赖完全不同。所以我想知道是否可以像这样完全提取一个公共文件(显然是伪代码):

<include common.gradle> // includes android block, common tasks, artifact setup etc. 

dependencies {
  api 'androidx.appcompat:appcompat:1.1.0'
  api 'com.google.code.gson:gson:2.8.5'
  ...
}

【问题讨论】:

    标签: android gradle


    【解决方案1】:

    您可以将常用设置提取到 gradle 文件中(比如说common.gradle,然后将其用作

    apply from: '../path/to/common.gradle'
    

    参考:https://docs.gradle.org/current/userguide/plugins.html#sec:script_plugins

    【讨论】:

      【解决方案2】:

      提取通用构建逻辑的推荐方法是leverage buildSrc 并创建插件,然后将其应用于您的项目。

      如文档所述,这具有应用脚本的许多好处。

      此外,我建议通过插件应用程序进行显式化。虽然您可以开发配置所有项目的单个插件,例如基于项目名称的一些逻辑,但通常最好让不同的插件匹配不同的项目类型。 这样,当打开构建文件时,您会立即看到它是什么类型的项目。

      当然,您可以在buildSrc 中为公共部分提供公共代码。

      另一个好处是,从 buildSrc 插件迁移到已发布的插件要容易得多……以防万一您的配置模式开始出现在不同的项目中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-31
        • 2022-10-14
        • 2020-10-18
        • 2021-12-06
        • 2021-08-02
        • 1970-01-01
        相关资源
        最近更新 更多