如何组织常见的渐变任务并提取常见的代码块



我有一个由10多个库模块组成的android项目。这些模块中的每一个都包含许多所有模块通用的渐变代码。例如,我在所有的build.gradle文件中都使用了这个答案中的Javadoc生成任务。

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

我可能会向后看,因为我在Gradle方面真的很糟糕,但任何能让我避免在10个不同文件(lib1/build.Gradle、lib2/build.grade…(中有相同的60行Gradle代码的指针都会很有帮助!

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

<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'
...
}

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

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

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

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

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

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

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

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

最新更新