我正在處理一個有許多maven依賴的大項目,其中一些可能是可傳遞的。maven包快照依賴關係?
我想知道行家如何打包快照依賴,因爲當我打開一個神器我看,有時庫打包帶在他們的名字快照和其他時候有一個時間,像在這樣的畫面:
我什麼擔心最多的是,即使-U參數快照庫並不總是對應於最新版本的庫包裝。
在pom.xml中,依賴版本總是以「-SNAPSHOT」結尾,我們使用的是maven 3.3.3。
我正在處理一個有許多maven依賴的大項目,其中一些可能是可傳遞的。maven包快照依賴關係?
我想知道行家如何打包快照依賴,因爲當我打開一個神器我看,有時庫打包帶在他們的名字快照和其他時候有一個時間,像在這樣的畫面:
我什麼擔心最多的是,即使-U參數快照庫並不總是對應於最新版本的庫包裝。
在pom.xml中,依賴版本總是以「-SNAPSHOT」結尾,我們使用的是maven 3.3.3。
快照在本地存儲庫和遠程存儲庫中的處理方式不同。
mvn install
將SNAPSHOTS作爲-SNAPSHOT
安裝到本地存儲庫,這對本地構建很好。遠程存儲庫包含具有時間戳的SNAPSHOT版本,因爲它們是mvn deploy
的結果。
在本地構建過程中,這兩個可能會混合,因爲一個構件可能是本地構建的結果(-SNAPSHOT
),而另一個構件是從遠程存儲庫(-20170623.063055-4
)下載的。
真正的問題是,他們可以混合在一個意想不到的方式。 Maven會盡可能從任何可用的存儲庫中獲取最新的SNAPSHOT。當您使用-U
時,這很可能會發生,因爲它會強制檢查遠程存儲庫。
有時,這會導致一個錯誤:lib-a
和lib-b
都依賴關係,你建兩個5分鐘前,但是CI內置lib-a
3分鐘前,然後構建將使用CI lib-a
和你lib-b
作爲CI有更新的版本。如果您修改了lib-a
中的某些內容,但CI的lib-a
未包含它,因爲它尚未提交,那麼這將是一個非常煩人的問題。
最好的策略是避免將快照部署到遠程存儲庫。
這是關於存儲庫內部的好文章:https://blog.packagecloud.io/eng/2017/03/09/how-does-a-maven-repository-work/
也有一個相關的SO回答:https://stackoverflow.com/a/32416454/8230378
請把文字而不是圖片的很多人讀這裏有防火牆限制......你是說關於包裝。什麼樣的包裝? WAR的/ EAR的/ JAR的/ ZIP?你好嗎?最好的將是完整的POM文件...有時候人們使用maven-assembly-plugin與目標文件夾進行打包,這可能會導致這種情況。等等... – khmarbaise