【问题标题】:Gradle dependency versions '+' signGradle 依赖版本 '+' 符号
【发布时间】:2023-04-08 08:37:01
【问题描述】:

我试图了解 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]+)。这是正确的思维方式吗?

【问题讨论】:

    标签: gradle


    【解决方案1】:

    在这种情况下,如果版本 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

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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      Gradle 文档Declaring Versions and Ranges

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

      根据

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

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

      使用+ 符号无法实现。

      可以表示为[5.10,)

      【讨论】:

        猜你喜欢
        • 2017-08-21
        • 2018-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-02
        • 2017-12-26
        相关资源
        最近更新 更多