gradle依赖树使用方括号

时间:2018-01-11 07:58:08

标签: android gradle dependencies

我正在查看Android项目的Gradle依赖关系报告,并发现了以下声明。

+--- com.google.android.gms:play-services-gcm:11.0.4
|    +--- com.google.android.gms:play-services-base:[11.0.4] -> 11.0.4
|    |    +--- com.google.android.gms:play-services-basement:[11.0.4] -> 11.0.4
|    |    |    \--- com.android.support:support-v4:25.2.0 -> 25.4.0 (*)
|    |    \--- com.google.android.gms:play-services-tasks:[11.0.4] -> 11.0.4
|    |         \--- com.google.android.gms:play-services-basement:[11.0.4] -> 11.0.4 (*)

我不明白的是com.google.android.gms:play-services-base:[11.0.4] -> 11.0.4,使用方括号并解析为同一版本?

以下是如何在我的项目中声明依赖项

compile 'com.google.android.gms:play-services-gcm:11.0.4'

1 个答案:

答案 0 :(得分:1)

我认为它来自Maven依赖版本规范格式 - 请参阅参考here以及下面复制的具体细节:

  • (,1.0] - &gt; x <= 1.0
  • 1.0 - &gt;如果1.0不可用,它通常表示1.0或更高版本。 Maven插件可能会有不同的解释,因此使用其他更具体的选项会更安全。
  • [1.0] - &gt;完全是1.0
  • [1.2,1.3] - &gt; 1.2&lt; = x&lt; = 1.3
  • [1.0,2.0) - &gt; 1.0&lt; = x&lt; 2.0
  • [1.5,) - &gt; x> = 1.5
  • (,1.0],[1.2,) - &gt; x <= 1.0或x> = 1.2。多个集用逗号分隔。
  • (,1.1),(1.1,) - &gt;如果知道不与图书馆合作,则不包括1.1。

您帖子中的版本为[11.0.4],基于上述内容的版本仅为版本11.0.4。有趣的是,这与11.0.4之间存在细微的差别 - 如果指定的版本由于某种原因不可用,那么前者将失败(我认为它会在依赖解析期间导致错误),而后者将导致在使用更高版本时(假设有一个版本可用)。

至于为什么它会解析(即你在依赖图中得到它旁边的-> 11.0.4),我想它是因为指定版本包含版本范围引用字符(即使在这种情况下那些字符意味着它将解析为完全相同的版本。)