2013-04-02 41 views
3

我有一個將其構件發佈到Nexus Maven存儲庫的Ivy項目。然後我需要其他Maven項目來將這些罐子用作依賴關係。我已經能夠讓Ivy創建並上傳pom.xml以及罐子,這很好。問題是,當我使用的Ivy發佈一個新的快照版本 - 沒有Maven的項目將獲取新的快照依賴,就算我做的:使用Maven元數據發佈Ivy SNAPSHOTS

mvn clean install -U 

我注意到,常春藤不發佈maven- metadata.xml文件到回購 - 我認爲這是問題?如果是這樣,是否有任何方法讓艾維產生這個?

回答

3

常春藤可以被配置爲讀取解析相關性時,該文件(見ibilio解析器的「m2compatible」屬性),但publish任務不創建或更新此文件.....

看似很客戶端創建並更新「maven-metadata.xml」文件的工作....這是Maven存儲庫的一個未記錄的功能。 (如果有人可以找到它的描述,可能會修復一個常春藤錯誤)。

標準的解決方法是定期安排一個Nexus任務來重新生成元數據文件。請參閱:

一個更極端的解決辦法是使用Maven ANT任務來執行發佈一步....

上的快照修訂解說

近來我我們得出了快照發布不值得付出努力的結論。持續交付促進了每個構建都是潛在可釋放的概念,常春藤有一個漂亮的buildnumber任務,確保每個構建都是唯一的。當只有一種構建時,我發現我的構建過程更簡單。

快照是僅在與其他使用Maven的項目共享開發構建工件時才需要的功能。恕我直言,ivy的動態修訂功能更強大,因爲它們可以在構建時解決「最新」版本。怎麼看deliver任務與在下面的例子中makepom任務相結合:

+4

有關maven-metadata.xml的更新要求,請參閱此處:https://support.sonatype.com/entries/24431666。 – ingyhere

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://…" />

+2

這很棒,但這篇文章是關於發佈,而不是解決文物。該文檔明確指出,該屬性僅用於告知解析器如何以及在何處獲取文件。沒有關於我可以看到的發佈(http://ant.apache.org/ivy/history/latest-milestone/resolver/ibiblio.html)。對於那些想在異構語言/構建環境中使用Ivy的人 - 我們實際上依賴maven-metadata.xml - 我們被冷落了。 – ingyhere

+0

我們使用Ivy來發布和檢索,所以這個修復對我們來說很好 – Nathan