对于我们的项目,我们希望大多数依赖自动更新,因此我们希望使用 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 元素中使用具有特殊含义的字符串来解决这个问题是不可能的。 (感谢:this post)
我们最终使用版本匹配器来强制 ivy 不使用 -beta- 或 -alpha 版本。
它不是最佳解决方案,正则表达式可能还需要更新几次。
在 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"/>
不完全确定这是否需要最新版本,但到目前为止似乎是这样。
关于ivy - 带有 ivy 的最新稳定版本,不包括 alpha 和 beta 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25549166/