2017-03-06 19 views
0

我有一個Maven項目,工作得很好。Maven會在本地Maven回購中覆蓋手動修補的jar嗎?

爲了對問題進行分類,我手動修補了一個jar以添加調試日誌記錄,然後將其複製到本地Maven repo目錄中。我對jar文件進行了後續更改以添加更多調試,並執行了「mvn install:install-file」,因爲這看起來更「正式」。 (我知道工件是不可改變的,但我不想改變pom.xmls)。

我的問題是:什麼時候(如果有的話)Maven會用遠程Maven倉庫中的一個覆蓋這個已修補的jar,這被認爲是事實的根源?

+0

安裝工件會覆蓋以前安裝的工件。但爲什麼你需要安裝它? – Tunaki

+0

不知道我理解你的問題。你的意思是「爲什麼要直接將jar複製到版本庫目錄時調用install-file」或者你的意思是「你爲什麼要改變maven版本庫中的東西」? – Dave

回答

2

只有三個場景中,那個罐子被覆蓋:

  1. 如果您刪除本地平方米倉庫的jar,它會從遠程倉庫你建立你的Maven項目,下一次下載。
  2. 如果你用'-U'選項來構建你的maven項目。這樣做會迫使maven更新遠程存儲庫的依賴關係。
  3. 如果您對相同版本的相同工件(更新代碼)執行mvn安裝。
+0

感謝您列舉場景。我想也許Maven每隔一段時間就會做一次校驗和分析,以確定工件是否改變並採取相應措施,但是我猜想,因爲Maven工件被認爲是不可變的,那麼沒有必要這樣做。也許快照的行爲有所不同。 – Dave

+0

是的。我提到的行爲只適用於靜態(非快照)版本。在快照的情況下,更新策略定義工件從遠程存儲庫更新的頻率。我強烈建議不要使用快照版本,如果你打算將修改後的工件保存在本地倉庫中。 –

+0

我發現,如果您使用特定存儲庫(管理器),然後更改爲其他存儲庫,maven將重新下載工件。例如,我們在工作中使用Nexus,但是當我回家並且亂七八糟時,我將settings.xml更改爲指向我家的Nexus實例(每個人都有一個,對吧?)。這會導致Maven重新下載許多工件,因爲它認爲來自不同Repos的相同工件會有所不同。您可以在本地'〜/ .m2/repository'中的'_remote.repositories'文件中查看與每個工件關聯的附加元數據。 –

相關問題