版本范围为gradle

时间:2016-01-15 11:56:14

标签: gradle dependencies repository

在gradle依赖项中指定版本范围的可能方法有哪些?我看到了一些1. +符号,但我没有找到一个真正说明可行和不可行的文档。此外,我不知道是否也可以使用Maven范围。

有人可以给我一个简短的概述,以便我能理解规则吗?

2 个答案:

答案 0 :(得分:21)

“Gradle Dependency Management”一书在p。 12和13,除了+注释(2.1。+表示范围从2.1.0到2.2.0不包括在内),您可以使用常春藤符号表示窗体的打开和关闭间隔

[1.0,2.0]
[1.0,2.0[

[1.0, )

表示“从1.0开始的所有版本”。

答案 1 :(得分:1)

首选替代:使用常春藤表示法指定版本范围。以下是从this web page复制的一些示例:

  • [1.0, 2.0]:所有版本> = 1.0和<= 2.0
  • [1.0, 2.0[:所有版本> = 1.0和<2.0
  • [1.0, ):所有版本> = 1.0 // avoid. Unbound is dangerous!

麻烦的选择:在主要,次要或补丁号码中使用“ +”。这种方法至少有两个问题:

  • 如果您正在构建一个lib并生成一个pom文件,则pom将与maven不兼容,除非您应用一些解决方法来解析版本并防止pom依赖项在version元素中使用'+'。参见this Gradle github issue
  • “ +”的含义容易混淆。好吧,也许不是,但是问一下周围的所有朋友是否完全了解1.1.+1.1+在gradle依赖项中的区别。

理想的选择:完全避免 dynamic 依赖性(使用'+'或版本范围)。而是使用固定的版本依赖性,并经常通过良好的测试来更新版本。原因如下:

  • 在过去,向后兼容是神圣的。那已经不对了。新版本通常会移动/删除/重命名类和函数。
  • 如果您的依赖项是动态的(尤其是带有'+'或未绑定范围),则下一个版本可能会选择与您的项目不兼容的新版本。不兼容可能仅在rutime时被检测到。
  • 今天建立的库的X版本可能与明天建立的库的X版本有所不同,如果它的依赖关系是动态的并且一个新版本将在一夜之间发布。对于图书馆来说,这种不确定性水平是不希望的。