带有常春藤的最新稳定版,不包括alpha和;测试版发布

时间:2014-08-28 12:44:38

标签: ivy

对于我们的项目,我们希望最多的家属自动更新,因此我们希望在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

这是可以理解的,因为我们在maven-metadata.xml中使用包含以下xml的ibiblio解析器 <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

的版本

现在常春藤有一个构造,但文档非常稀疏,我无法弄清楚如何使这个策略“忽略”alpha版本。

我尝试使用以下内容的变体无效(使用rev="latest.test"): `                                               

编辑: 从org.apache.ivy.plugins.latest.LatestRevisionStrategy的源代码来看,由于版本首先按部分拆分,然后逐个部分地进行比较,因此特殊情况似乎无法解决这个问题。

如果有办法禁止包含特定字符串的修订,我的问题也将得到解决。 `

1 个答案:

答案 0 :(得分:4)

org.apache.ivy.plugins.latest.LatestRevisionStrategy的源代码表明,使用latestStrategy元素中的特殊含义字符串无法修复此问题。 (感谢:this post

我们最终使用版本匹配器来使常春藤不使用-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"/>

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