29

我试图了解 Gradle 如何使用“+”号处理依赖版本,如示例 8.1 所示:http: //www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html

testCompile group: 'junit', name: 'junit', version: '4.+

文档说明这将获得一个 junit >= 4.0 的版本。如何获得大于(或等于)5.10 的依赖版本?会是5.10+还是5.1+?前者似乎无法正常工作,但后者可以。如何获得大于或等于 1.22 的依赖项?1.2+? 在这种情况下,如果版本 1.21 存在并且是最新版本,我想失败,因为我想要大于或等于 1.22,但1.2+会寻找 >= 1.20。我该如何指定?这可能吗?我似乎找不到更多关于它的文档。

编辑:我倾向于认为它1.2+等同于1.2([0-9]+). 这是正确的思维方式吗?

4

3 回答 3

24

在这种情况下,如果版本 1.21 存在并且是最新版本,我想失败,因为我想要大于或等于 1.22,但 1.2+ 将寻找 >= 1.20。我该如何指定?这可能吗?

我认为没有关于此的任何文档,但由于 Gradle 最初使用 Ivy 来实现其所有依赖项管理功能,因此我查看了有关动态版本的 Ivy 文档:

http://ant.apache.org/ivy/history/latest-milestone/ivyfile/dependency.html

它只比 Gradle 文档多一点。我尝试在 Gradle 中使用 Ivy 风格的版本范围进行试验:

compile group: 'log4j', name: 'log4j', version: '[1.2.12,1.2.17]'

令人惊讶的是,它似乎有时会根据版本范围起作用。在上面的示例中,它解析为1.2.17.

我知道这并不能完全解决您的问题(我也很好奇),但希望它可以为您提供一些信息。

于 2013-02-20T18:29:24.157 回答
1

我认为问题在于您在正则表达式方面错误地考虑了“+”。它并不意味着被解读为正则表达式元素(“一个或多个数字字符”),而是“每个领先的 SEMVER 组件都与提供的模式匹配的最新可用版本”。关于为什么不推荐使用这种表示法的参考资料可以在以下位置找到:http ://central.sonatype.org/articles/2014/Oct/28/enforcing-valid-dependency-versions/

于 2017-07-19T21:31:40.210 回答
0

Gradle 文档声明版本和范围

如何获得大于(或等于)5.10 的依赖版本?

根据

前缀版本范围:例如 1.+、1.3.+

  • 仅包含与 + 之前部分完全匹配的版本。
  • 范围 + 本身将包括任何版本。

+使用符号无法实现。

它可以表示为[5.10,)

于 2021-10-15T22:29:39.623 回答