使用 Ivy API 获取最新版本的依赖项?
Posted
技术标签:
【中文标题】使用 Ivy API 获取最新版本的依赖项?【英文标题】:Use Ivy API to obtain latest version of a dependency? 【发布时间】:2013-09-02 07:03:22 【问题描述】:我们有一个简单的 Ivy 存储库,由内部服务器托管(Apache httpd 提供 JAR 及其 XML Ivy 描述符)。
我现在需要以编程方式确定我们的 repo 中最新版本的依赖项。因此,如果我们有两个版本的 Mockito,我们的 repo 可能如下所示:
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 代码。
有什么想法吗?提前致谢!
【问题讨论】:
【参考方案1】:我相信您可以使用latest.integration
修订值来指定所需的绝对最新版本。例如,像这样指定您的 Ivy 依赖项:
<dependency org="mockito" name="mockito-all" rev="latest.integration" />
如果您不想要“edge”版本,也可以指定latest.milestone
或latest.release
。下面是对rev
值的一个很好的解释:http://ant.apache.org/ivy/history/latest-milestone/ivyfile/dependency.html
【讨论】:
感谢@Polaris8787,但我不是在构建时谈论。我需要构建一个 Java 工具来扫描我们的 Ivy 存储库并告诉我每个模块的最新版本号,然后将其放在一起自定义报告。所以我需要直接在 Java 代码中调用一些 Ivy 任务,然后使用 Ivy API 以字符串的形式获取版本号。 @user1768830 你搞定了吗?我正在寻找类似的东西。我不希望 Ivy 只使用“最新的”。我想手动指定每个版本,但我想要一份报告说“SomeJar 的新版本可用”,所以我可以决定是否升级。 Ivy 已经获取此信息以解决动态规范,例如“0.0+” - 我只是希望将其交付给我,以便我做出决定。【参考方案2】:所以我发现你的问题想要做同样的事情,经过一些研究发现在 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>
【讨论】:
以上是关于使用 Ivy API 获取最新版本的依赖项?的主要内容,如果未能解决你的问题,请参考以下文章
Jenkins 和 gradle - 使用最新版本的 CI 依赖项构建项目,用于生产的特定版本
ivy(2.3.0 或 2.4)不使用分类器解析 SNAPSHOT maven 依赖项