我在一個相當大的項目中工作。我們有很多項目,每個項目都有依賴關係。我們使用maven,通常我們沒有任何問題。因此,沒有給予太多的細節,想象一下,對於一個給定的項目,比方說,tps-reports
的pom.xml
的依賴關係部分的樣子:大項目的依賴管理
<name>TPS-Reports</name>
<description>
TPS Reports frontend.
</description>
<dependencies>
<dependency>
<groupId>com.initech</groupId>
<artifactId>gui-components</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>com.initech</groupId>
<artifactId>multithreading</artifactId>
<version>3.7</version>
</dependency>
<dependency>
<groupId>com.initech</groupId>
<artifactId>utils</artifactId>
<version>2.3.0.0</version>
</dependency>
<dependency>
<!-- TODO: update to new version -->
<groupId>com.initech</groupId>
<artifactId>object-pooling</artifactId>
<version>1.9.3.1</version>
</dependency>
</dependencies>
現在,Initech的擁有噸的依賴,比如項目,object-pooling
,這也取決於許多其他更多組件,例如(utils
和multithreading
)。
生活對object-pooling
開發人員有好處。這是一個非常穩定的模塊,並且一切順利。與其他任何模塊一樣,它也具有依賴性。 object-pooling
開發人員都是紳士和公平的女士,每當他們發現一個重要的bug時,他們更新所有依賴於object-pooling
的項目。
現在,版本1.9.3.1
的object-pooling
是穩定的並且沒有已知的關鍵錯誤。開發人員非常努力地添加大量新功能,並在一段時間後發佈版本2.0.0.0
。當然,1.9.3.1
和2.0.0.0
之間,存在中間版本(例如1.9.3.1
,1.9.3.2
,1.9.4.0
,1.9.5.3
等等)。正如我所說的,生活對於object-pooling
開發者來說很好。版本2.0.0.0
具有新功能和大量修復程序。
然而,到底是指日可待爲tps-reports
開發。他們已經使用1.9.3.1
已經有一段時間了,因爲這個版本中沒有已知的錯誤,所以他們對舊版本很滿意。現在,他們要使用的修補object-pooling
,使他們更新自己的pom.xml
使用版本2.0.0.0
,現在看起來是這樣的:
<name>TPS-Reports</name>
<description>
TPS Reports frontend.
</description>
<dependencies>
<dependency>
<groupId>com.initech</groupId>
<artifactId>gui-components</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>com.initech</groupId>
<artifactId>multithreading</artifactId>
<version>3.7</version>
</dependency>
<dependency>
<groupId>com.initech</groupId>
<artifactId>utils</artifactId>
<version>2.3.0.0</version>
</dependency>
<dependency>
<!-- use object poooling's new features -->
<groupId>com.initech</groupId>
<artifactId>object-pooling</artifactId>
<version>2.0.0.0</version>
</dependency>
</dependencies>
他們發現他們有新的bug。毋庸置疑,當這些錯誤依賴於的1.9.3.1
版本時,這些錯誤並不存在。他們深入到他們的代碼庫的記錄,他們發現,不僅object-pooling
傢伙已經做了提交十萬,而且他們使用的是最新版本的multithreading
和utils
,其中也有不少的提交。
顯然,有很多問題可以駐留的地方。它可以是上object-pooling
,它可以在object-pooling
和tps-reports
之間的相互作用,也可以是上multithreading
或utils
或任何怪異組合。
問題是:你們如何解決這類問題?您如何管理依賴於其他項目的大型項目的依賴關係?有沒有一些工具可以幫助完成這項任務?
謝謝!
嗯......但這意味着你將不得不測試所有依賴關係的所有可能版本......另外,如果在基於人性測試期間出現錯誤而不是單元測試,會發生什麼? – chahuistle 2011-01-27 14:52:34