我有一个常春藤项目,将其工件发布到Nexus Maven存储库。然后我需要其他Maven项目才能将这些jar用作依赖项。我已经能够让Ivy创建并上传pom.xml以及jar,这工作正常。问题是,当我使用Ivy发布一个新的SNAPSHOT版本时 - 即使我这样做,Maven项目都不会检索新的快照依赖项:
mvn clean install -U
我注意到Ivy没有将maven-metadata.xml文件发布到repos - 我认为这是问题所在?如果是这样,有没有办法让Ivy产生这个?
答案 0 :(得分:3)
可以将Ivy配置为在解析依赖项时读取此文件(请参阅ibilio解析程序的“m2compatible”属性),但publish任务不会创建或更新此文件....
创建和更新“maven-metadata.xml”文件似乎是客户端的工作....这是Maven存储库的一个未记录的功能。 (如果有人能找到它描述的地方,也许可以修复常春藤虫虫。)
标准解决方法是定期安排Nexus任务以重新生成元数据文件。参见:
更极端的解决方案是使用Maven ANT任务来执行发布步骤....
最近我得出结论,快照发布不值得付出努力。持续交付促进了每个构建都可能发布的概念,常春藤有一个漂亮的buildnumber任务,确保每个构建都是独一无二的。当只有一种构建时,我发现我的构建过程更简单。
快照是仅在使用Maven与其他项目共享开发构建工件时才需要的功能。恕我直言ivy的动态修订功能更强大,因为它们在构建时解决了“最新”修订版。在以下示例中查看deliver任务如何与makepom任务结合使用:
答案 1 :(得分:1)
我有类似的问题,发现以下网站有助于解决它: 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://…" />