从库中获取gradle变量

时间:2018-01-21 01:51:37

标签: gradle android-gradle

有没有办法在gradle中导出变量,以便将项目作为依赖项导入的其他项目可以访问它?

对于我的特定情况,我有一个使用AppCompat的Android项目。我目前将AppCompat版本作为gradle.properties中的变量,但AppCompat有多个组件,我只添加了我需要的组件。对于使用我的库并需要其他AppCompat组件的其他人来说,最好是使用相同的版本添加它。截至目前,他们必须自己指定版本并确保它们是相同的。如果他们有办法访问我用作变量的版本,那么它会更好,因此它始终保持同步。

我希望有一个更好的解决方案,而不是说在github上托管一个原始gradle文件,它会将变量添加为扩展名,但截至目前,这似乎是最可行的选项。

2 个答案:

答案 0 :(得分:1)

理论上你提出的问题很难,因为gradle需要首先解决一个依赖关系以解决另一个依赖关系,但gradle无法提前知道正确的顺序。您的用户可以使用自定义插件或buildSrc代码在主构建过程之前获取您的jar / pom,提取版本号。但它会很混乱。

解决根本问题有三种常用方法:

  1. 如果您的版本与您的版本不匹配,您图书馆的用户可以使用Gradle解析策略failOnversionConflict()失败
  2. 您可以提供带有版本号的BOM(物料清单),但这可能需要额外的gradle插件或最新版本的gradle
  3. 你可以shade a library into your jar,那样你的代码总是使用那个版本(不确定你的情况是否可行)
  4. Related issue for Maven

答案 1 :(得分:0)

我最终决定制作一个gradle插件是最好的解决方案。

我个人通过jitpack部署我的库,其中每个提交,标记或快照都可以用作版本。因此,通过更改我的库的版本号,我可以让用户轻松更新所有依赖项,而不必更改每个包含的依赖项。

可以找到插件及其说明here

本质上,它捆绑了版本代码并将它们添加为扩展名。将其置于buildSrc下允许它自动包含在项目本身中,因此没有重复的版本代码。将它们作为变量允许它自动更新,同时为开发人员提供了在何处使用它的灵活性,以及​​他们是否想要使用它。

每套版本也与图书馆的版本相关联,因此更新和还原是无缝的