使用 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.milestonelatest.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 依赖项构建项目,用于生产的特定版本

Grails:使用快照依赖项离线工作

获取最新的 Maven 依赖项。 [复制]

ivy(2.3.0 或 2.4)不使用分类器解析 SNAPSHOT maven 依赖项

为啥我必须从我的 pom 中删除一个依赖项,然后再将其添加回来并安装以获取最新版本的 maven 包?

Maven 依赖项:从 settings.xml 获取最新的忽略存储库