最新的稳定版本,包括 ivy 不包括 alpha 和 beta 版本



对于我们的项目,我们希望大多数依赖项自动更新,因此我们希望在IVY中使用最新的策略。然而,我们不想运行依赖关系的出血边缘,即alpha和beta版本。

使用时:

<dependency org="org.apache.httpcomponents" name="httpclient" rev="latest.revision" />

<dependency org="org.apache.httpcomponents" name="httpclient" rev="latest.release" />

我们得到修订版4.4-alpha1

这是可以理解的,因为我们使用了ibiblio解析器,它在maven-metadata.xml中包含以下xml <metadata> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <versioning> <latest>4.4-alpha1</latest> <release>4.4-alpha1</release> <versions> <version>4.0-alpha1</version> <!-- snip ---> <version>4.3-alpha1</version> <version>4.3-beta1</version> <version>4.3-beta2</version> <version>4.3</version> <version>4.3.1</version> <version>4.3.2</version> <version>4.3.3</version> <version>4.3.4</version> <version>4.3.5</version> <version>4.4-alpha1</version> </versions> <lastUpdated>20140801101402</lastUpdated> </versioning> </metadata>

元数据将alpha版本表示为发布版本和最新版本。(不确定这是否与实际有关)

在这种情况下,我们希望在元数据列表中获得4.3.5 版本

现在ivy有一个带有和的构造,但文档非常稀疏,我不知道如何使这个策略"忽略"alpha版本。

我尝试了以下变体,但没有成功(使用rev="latest.test"):`

编辑:从org.apache.ivy.plugins.latest.LatestRevisionStrategy的源代码来看,似乎特殊意义无法解决这个问题,因为版本首先被分成几个部分,然后在逐个部分的基础上进行比较。

如果有一种方法可以禁止包含特定字符串的修订,我的问题也会得到解决。`

org.apache.ivy.plugins.latest.LatestRevisionStrategy的源代码表明,不可能在latestStrategy元素中使用特殊含义的字符串来修复此问题。(感谢:本帖)

我们最终使用了一个版本匹配器来强制ivy不使用beta或alpha版本。这不是一个最佳的解决方案,regexp可能还需要更新几次。

在ivysettings.xml中:

<version-matchers usedefaults="true">
    <pattern-vm name="lastest.nobeta">
        <match  revision="latest.nobeta" pattern=".*d+.d+.?d*(FINAL|RELEASE|STABLE)?"  matcher="regexp" />
    </pattern-vm>
</version-matchers>

以及在ivy.xml:中

<dependency org="org.apache.poi" name="poi" rev="latest.nobeta"/>

不完全确定这是否是最新版本,但到目前为止似乎是这样。

最新更新