2016-09-22 42 views
0

假設我們有一個項目使用Maven,並且有一些dependencies,它們是在同一個公司/團隊甚至同一個人開發的。很顯然,當一些開發人員想要compile該項目時,specified dependencies將從回購中提取並在本地下載,如果他們還沒有。內部依賴性的Maven版本控制

現在讓我們假設以下情形:

的開發者不在乎有關的依賴關係和

  1. 依賴的版本是x.x.x.SNAPSHOT =>maven將獲取的最新版本每24小時回購一次(默認情況下)。 問題:如果此版本與您的項目不兼容,基本上,您甚至不知道發生了什麼,因爲您沒有更改項目中的任何內容。這裏唯一可能的解決方案是在本地編譯和管理依賴關係。

  2. 依賴項的版本是「x.x.x.y」=> maven將獲取這個版本,沒有別的。所以,爲了更新這個依賴關係,我需要更改版本。 問題:它似乎意味着每當此依賴關係發生一些變化並且代碼被推送到服務器時,版本必須更改爲。但這聽起來很荒謬。

可能的解決辦法:

看來,在這種情況下,唯一可行的辦法是人工處理internal dependencies(得到回購源和本地編譯)。然而,這兩個問題困擾着我:

  1. 這個解決方案打破了maven應該獲取所有依賴關係的想法。
  2. 這個解決方案會給那些只想開始項目開發但不關心這些依賴關係的開發者帶來困難(因爲這些依賴項並未在他們正在開發的項目部分中使用)。

有沒有更好的解決方法?

+3

如果開發人員不關心依賴關係,那麼他就不會認真對待他的工作。此外,SNAPSHOT意味着您處於開發者之下,這意味着它將改變......不兼容性由major.minor.patch verison表示。 (如果你遵循semver)......如果你使用的發佈版本是不可更改的,那麼你將需要更新你的依賴關係,如果他們有新的發佈版本,那麼你的版本控制中記錄的發佈版本是不可能的。 – khmarbaise

+0

這並不意味着如果我們都是手動和本地編譯,那麼使用maven是沒有意義的。 – Rufi

+0

也許這太多了,我說的不在意,但我的意思是開發人員對依賴關係不感興趣,但是想要最新的工作版本,但是,這種依賴關係正處於開發過程中。 – Rufi

回答

0

您還可以通過讓您的maven與您自己的管理Web回購協同工作來關注最新的穩定依賴關係。所以你可以肯定所有的船員都有一個需要版本的插件,框架等等。我們的團隊使用TeamCity服務器來構建工作簽名,.m2/settings.xml也配置爲與我們的TC服務器回購協同工作。團隊領導層正在控制所有版本。