对于我们的项目,我们希望最多的家属自动更新,因此我们希望在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
的源代码来看,由于版本首先按部分拆分,然后逐个部分地进行比较,因此特殊情况似乎无法解决这个问题。
如果有办法禁止包含特定字符串的修订,我的问题也将得到解决。 `
答案 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"/>
不完全确定这是否采用了最新版本,但到目前为止似乎是这样。