2016-01-20 643 views
1

我正在用Maven3構建一個多模塊項目。在一個模塊中,它給出了「構建失敗」,並說完成我的錯誤後,我可以使用-rf:moduleName爲了繼續我的構建。我沒有改變任何東西,並且這次用-rf:moduleName作爲maven說的並且成功地建立了相同的命令。這種情況可能的原因是什麼,而且Maven中的-rf命令不可靠?Maven中的-rf命令是否可靠?

+1

然後你發生的錯誤隨機發生;)也許你可以發佈stacktrace和你的POM? – Tunaki

+0

兩天前發生的事情,不幸的是,我沒有這些文件了。構建持續了40分鐘,然後給出了這個錯誤。這使我對Maven的信任有點惡化:) –

+0

你應該檢查日誌文件並找出這個...的根本原因......因爲這聽起來不像Maven問題......當然,pom文件和錯誤輸出會有幫助.. – khmarbaise

回答

2

要麼你有一個隨機失敗的非確定性測試,你需要尋找原因並修復它。

Etiher它僅僅是一個插件行家誤差,對於行家爲例潔淨的插件在某些OS可能會失敗,如果使用目標目錄(瀏覽器等),並且可能工作時,它再次執行第二次如果鎖是釋放。

要麼你有快照依賴關係和並行構建,並與其他茶友共享Maven工件存儲庫,如Nexus或Artifactory。

例如,如果模塊A依賴於B,則在您的本地構建中,構建鏈將爲「B,然後A」。如果A不編譯,則B被構建並放入本地存儲庫,但構建項目A時整個構建鏈會失敗。

然後如果使用-rf標誌,則構建鏈不會重新編譯B並開始構建從模塊A開始。

但是假設你有一個連續的部署,比如Teamcity或者Jenkins,那麼項目B可以用相同的版本號(快照)重建並放到共享的中央倉庫中。在這種情況下,模塊A檢索模塊B的最後可用快照,該模塊不能是正確的工件(如果您有本地修改),並且A編譯模塊B時可能沒有錯誤。

您可以避免這個問題要麼通過完全重建鏈,要麼使用-o標誌,這意味着「離線」模式(即Maven將只從本地存儲庫檢索工件)。

要正確修復它,您應該注意錯誤並調查具體錯誤的含義。這是一個編譯錯誤?測試失敗? Maven插件錯誤?開始閱讀錯誤信息,它可能會幫助:)

+0

非常感謝您的詳細解答。將-o標誌添加到maven參數中總是更安全嗎? –

+1

您需要避免-o當Maven插件或新增的依賴項在本地存儲庫中不可用時,因爲您有maven從中央存儲庫下載它,但是當您第一次啓動構建時,這個缺失的依賴項將被緩存到本地庫。之後,您可以使用-o,直到您在pom中添加新的依賴項 – Prim