2017-07-04 63 views
0

我正在處理一個有許多maven依賴的大項目,其中一些可能是可傳遞的。maven包快照依賴關係?

我想知道行家如何打包快照依賴,因爲當我打開一個神器我看,有時庫打包帶在他們的名字快照和其他時候有一個時間,像在這樣的畫面:

enter image description here

我什麼擔心最多的是,即使-U參數快照庫並不總是對應於最新版本的庫包裝。

在pom.xml中,依賴版本總是以「-SNAPSHOT」結尾,我們使用的是maven 3.3.3。

+0

請把文字而不是圖片的很多人讀這裏有防火牆限制......你是說關於包裝。什麼樣的包裝? WAR的/ EAR的/ JAR的/ ZIP?你好嗎?最好的將是完整的POM文件...有時候人們使用maven-assembly-plugin與目標文件夾進行打包,這可能會導致這種情況。等等... – khmarbaise

回答

1

快照在本地存儲庫和遠程存儲庫中的處理方式不同。

mvn install將SNAPSHOTS作爲-SNAPSHOT安裝到本地存儲庫,這對本地構建很好。遠程存儲庫包含具有時間戳的SNAPSHOT版本,因爲它們是mvn deploy的結果。

在本地構建過程中,這兩個可能會混合,因爲一個構件可能是本地構建的結果(-SNAPSHOT),而另一個構件是從遠程存儲庫(-20170623.063055-4)下載的。

真正的問題是,他們可以混合在一個意想不到的方式。 Maven會盡可能從任何可用的存儲庫中獲取最新的SNAPSHOT。當您使用-U時,這很可能會發生,因爲它會強制檢查遠程存儲庫。

有時,這會導致一個錯誤:lib-alib-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