使用 Maven 元数据发布 Ivy SNAPSHOTS

Posted

技术标签:

【中文标题】使用 Maven 元数据发布 Ivy SNAPSHOTS【英文标题】:Publishing Ivy SNAPSHOTS with Maven metadata 【发布时间】:2013-03-24 04:47:45 【问题描述】:

我有一个 Ivy 项目,将其工件发布到 Nexus Maven 存储库。然后我需要其他 Maven 项目才能使用这些 jar 作为依赖项。我已经能够让 Ivy 创建并上传 pom.xml 以及 jars,它工作正常。问题是,当我使用 Ivy 发布新的 SNAPSHOT 版本时 - 任何 Maven 项目都不会检索新的快照依赖项,即使我这样做:

mvn clean install -U

我注意到 Ivy 没有将 maven-metadata.xml 文件发布到存储库——我认为这是问题所在?如果是这样,有什么方法可以让 Ivy 制作这个?

【问题讨论】:

【参考方案1】:

Ivy 可以配置为在解析依赖项时读取此文件(请参阅ibilio 解析器的“m2compatible”属性),但publish 任务不会创建或更新此文件.....

看起来创建和更新“maven-metadata.xml”文件是客户的工作……这是 Maven 存储库的一个未记录的功能。 (如果有人能找到它的描述,也许可以修复一个 ivy 错误)。

标准解决方法是定期安排 Nexus 任务以重新生成元数据文件。见:

http://www.sonatype.com/people/2009/09/nexus-scheduled-tasks/

更极端的解决方案是使用Maven ANT 任务来执行发布步骤....

关于快照修订的评论

最近我得出的结论是快照版本不值得努力。持续交付促进了每个构建都可能发布的概念,并且 ivy 有一个漂亮的buildnumber 任务,可确保每个构建都是独一无二的。当只有一种构建时,我发现我的构建过程更简单。

快照是仅在使用 Maven 与其他项目共享开发构建工件时才需要的功能。恕我直言,ivy 的动态修订功能更强大,因为它们在构建时解决了“最新”修订。在以下示例中查看 deliver 任务如何与 makepom 任务组合:

Convert ivy.xml to pom.xml Automate ivy revision increase for all my projects using ant script

【讨论】:

这里记录了 maven-metadata.xml 的更新要求:support.sonatype.com/entries/24431666。【参考方案2】:

我遇到了类似的问题,发现以下网站有助于解决它: http://ssinghvi.wordpress.com/2012/01/26/unable-to-retrieve-latest-artifact-from-sonatype-nexus-using-apache-ivy/

基本用<ibiblio name="Maven Central" m2compatible="true" useMavenMetadata="false" root="http://…" />

【讨论】:

很好,但是这篇文章是关于发布的,而不是解决工件的。文档明确指出,此属性仅用于告诉解析器如何以及从何处获取文件。我看不到任何关于发布的内容 (ant.apache.org/ivy/history/latest-milestone/resolver/…)。对于我们这些想要在异构语言/构建环境中使用 Ivy 的人——我们实际上依赖于 maven-metadata.xml——我们被冷落了。 我们使用 Ivy 来发布和检索,所以这个修复对我们来说很好

以上是关于使用 Maven 元数据发布 Ivy SNAPSHOTS的主要内容,如果未能解决你的问题,请参考以下文章

使用 IVY 将 SNAPSHOT 工件发布到 Maven - 有啥魔力?

如何使用 maven 从 ivy 存储库下载工件

Maven 范围如何通过 ivy 映射到 ivy 配置

sbt 插件的 ivy/maven 发布的差异

将公共 maven 存储库与 ivy 一起使用

如何使用不同的分类器在 Ivy 中下载多个 Maven 依赖项?