我正在查看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'
答案 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
),我想它是因为指定版本包含版本范围引用字符(即使在这种情况下那些字符意味着它将解析为完全相同的版本。)