使用Ivy API获取依赖项的最新版本?

5
我们有一个简单的Ivy仓库,它托管在内部服务器上(使用Apache httpd服务提供JAR和它们的XML Ivy描述符)。
现在,我需要以编程方式确定我们仓库中依赖项的最新版本。因此,如果我们有两个版本的Mockito,则我们的仓库可能如下所示:
mockito/                       ==>    organisation
    mockito-all                ==>    module
        1.9.4/                 ==>    revision #
            mockito-all-1.9.4.jar
            mockito-all-1.9.4-ivy.xml
        1.9.5/
            mockito-all-1.9.5.jar
            mockito-all-1.9.5-ivy.xml

希望能够通过Java使用Ivy来确定“1.9.5”是我们拥有的mockito/mockito-all模块的最新版本,这将不太可能成为一个Ant任务,而可能是一些使用ivy.jar内部存在的类的自定义Java代码。您有什么想法吗?先感谢了!
2个回答

2

我相信您可以使用latest.integration修订值来指定所需的绝对最新版本。例如,像这样指定您的Ivy依赖项:

<dependency org="mockito" name="mockito-all" rev="latest.integration" />

如果您不想使用“edge”版本,还可以指定latest.milestonelatest.release。关于rev值,这里有一个很好的解释:http://ant.apache.org/ivy/history/latest-milestone/ivyfile/dependency.html


1
谢谢@Polaris8787,但我不是在谈论构建时间。我需要构建一个Java工具,它将扫描我们的Ivy仓库,并告诉我每个模块的最新版本号,然后组合成自定义报告。因此,我需要直接在Java代码中调用一些Ivy任务,然后使用Ivy API将版本号作为字符串获取。 - user1768830
@user1768830 你完成了吗?我正在寻找类似的东西。我不想让Ivy只使用“最新版本”。我想手动指定每个版本,但我希望有一个报告显示“SomeJar的新版本可用”,这样我就可以决定是否升级。Ivy已经获取了此信息以解决动态规范,例如“0.0+”-我只是希望将其传递给我,以便我可以做出决策。 - radumanolescu

0

我发现你的问题与我想做的事情相同,经过一些研究,我发现在Ivy 2.4中存在这样的东西。

http://ant.apache.org/ivy/history/latest-milestone/use/checkdepsupdate.html

这是一个示例步骤:

<target name="ivy.outdated" description="Check ivy for outdated jars">
    <ivy:resolve/>
    <ivy:checkdepsupdate showTransitive="false" revisionToCheck="latest.release"/>
</target>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接