【问题标题】:Use Ivy API to obtain latest version of a dependency?使用 Ivy API 获取最新版本的依赖项?
【发布时间】: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 代码。

有什么想法吗?提前致谢!

【问题讨论】:

    标签: java versioning ivy dependency-management


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 2012-05-09
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 2019-03-03
      • 1970-01-01
      • 1970-01-01
      • 2014-10-13
      相关资源
      最近更新 更多