私はかなり大きなプロジェクトに取り組んでいます。私たちにはたくさんのプロジェクトがあり、それぞれのプロジェクトには依存関係があります。私たちは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
開発者はすべて紳士で公正な女性です。批判的なバグを見つけたら、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
を使用したいので、彼らはバージョン2.0.0.0
を使用するために彼らの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>
<!-- use object poooling's new features -->
<groupId>com.initech</groupId>
<artifactId>object-pooling</artifactId>
<version>2.0.0.0</version>
</dependency>
</dependencies>
彼らは、彼らが新しいバグを持っていることを発見します。言うまでもなく、これらのバグは、バージョン1.9.3.1
がobject-pooling
の場合には存在しませんでした。彼らはコードリポジトリのログを掘り下げて、object-pooling
人が何千ものコミットをしたばかりでなく、最新のバージョンのmultithreading
とutils
も使用していることも判明しました。
明らかに、問題が存在する可能性のある場所が数多くあります。それはobject-pooling
にあることができ、それはobject-pooling
とtps-reports
の間の相互作用になることができ、それはmultithreading
またはutils
または任意の奇妙な組み合わせにすることができます。
質問は次のとおりです。このような問題をどうやって解決しますか?他のプロジェクトに依存する大きなプロジェクトの依存関係をどのように管理しますか?この仕事を手助けするいくつかのツールがありますか?
ありがとうございます!
ええと...しかし、それはあなたがすべての依存性のすべての可能なバージョンをテストしなければならないことを意味するでしょう...さらに、人間によるテストではなく単体テストではないバグがあればどうしますか? – chahuistle