gradle 中的版本范围
Version ranges in gradle
在 gradle 依赖项中指定版本范围的可能方法有哪些?我看到了一些 1.+ 符号,但我还没有找到真正说明什么是可能的,什么不是的文档。另外不知道maven ranges能不能用
谁能给我一个简短的概述,以便我理解规则?
本书 "Gradle Dependency Management" 第 1 页指出。 12 和 13,除了 +-notation(2.1.+ 表示从 2.1.0 到 2.2.0 不包括的范围)之外,您还可以使用 Ivy 表示法表示
形式的开区间和闭区间
[1.0,2.0]
[1.0,2.0[
或
[1.0, )
对于 "all versions starting from 1.0"。
首选方案
使用 Ivy 表示法指定版本范围。以下是从 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!
麻烦的选择
在主要、次要或补丁号中使用“+”。这种方法至少有两个问题:
- 如果您正在构建一个库并生成一个 pom 文件,则该 pom 将与 Maven 不兼容,除非您应用一些解决方法来解析版本并防止 pom 依赖项在版本元素中使用“+”。参见 this Gradle github issue。
- '+'的含义容易混淆。好吧,也许不是,但是问问周围的人,看看你的同龄人是否都知道
1.1.+
和 1.1+
在 gradle 依赖关系中的确切区别。
理想选择
完全避免 动态 依赖项(使用“+”或版本范围)。相反,使用固定的版本依赖项并经常通过良好的测试更新版本。原因如下:
- 在过去,向后兼容性是神圣不可侵犯的。这不再是事实了。 新版本通常 move/remove/rename 类 和功能。
- 如果您的依赖项是动态的(尤其是“+”或未绑定范围),下一个构建可能会选择与您的项目不兼容的新版本。不兼容性只能在运行时检测到。
- 今天构建的库的版本 X 可能与明天构建的库的版本 X 不同,如果它的依赖项是动态的并且新版本在一夜之间发布。这种程度的不确定性对于图书馆来说是不可取的。
在 gradle 依赖项中指定版本范围的可能方法有哪些?我看到了一些 1.+ 符号,但我还没有找到真正说明什么是可能的,什么不是的文档。另外不知道maven ranges能不能用
谁能给我一个简短的概述,以便我理解规则?
本书 "Gradle Dependency Management" 第 1 页指出。 12 和 13,除了 +-notation(2.1.+ 表示从 2.1.0 到 2.2.0 不包括的范围)之外,您还可以使用 Ivy 表示法表示
形式的开区间和闭区间[1.0,2.0]
[1.0,2.0[
或
[1.0, )
对于 "all versions starting from 1.0"。
首选方案
使用 Ivy 表示法指定版本范围。以下是从 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!
麻烦的选择
在主要、次要或补丁号中使用“+”。这种方法至少有两个问题:
- 如果您正在构建一个库并生成一个 pom 文件,则该 pom 将与 Maven 不兼容,除非您应用一些解决方法来解析版本并防止 pom 依赖项在版本元素中使用“+”。参见 this Gradle github issue。
- '+'的含义容易混淆。好吧,也许不是,但是问问周围的人,看看你的同龄人是否都知道
1.1.+
和1.1+
在 gradle 依赖关系中的确切区别。
理想选择
完全避免 动态 依赖项(使用“+”或版本范围)。相反,使用固定的版本依赖项并经常通过良好的测试更新版本。原因如下:
- 在过去,向后兼容性是神圣不可侵犯的。这不再是事实了。 新版本通常 move/remove/rename 类 和功能。
- 如果您的依赖项是动态的(尤其是“+”或未绑定范围),下一个构建可能会选择与您的项目不兼容的新版本。不兼容性只能在运行时检测到。
- 今天构建的库的版本 X 可能与明天构建的库的版本 X 不同,如果它的依赖项是动态的并且新版本在一夜之间发布。这种程度的不确定性对于图书馆来说是不可取的。