依存関係の変更を処理するためのグッドプラクティスは、アプリケーション設計のグッドプラクティスと同じです。アーキテクチャを階層化し、各依存関係でのコードの広範な結合を最小限に抑えて、変更を分離しておく必要があります。これにより、依存関係をアップグレードしても、アプリケーションのすべての部分が破損することはありません。インターフェイスへのコードを作成し、ビジネスロジックをインフラストラクチャコードから分離します。
マイナーアップグレード(依存関係のポイントリリースのアップグレード)の場合、APIの変更による障害を検出するための包括的な単体テストのセットがあると役立ちます。これが、表面上は常に機能しているように見える些細なテストを作成するのに役立つことがある大きな理由の1つです。この例は、単純なクエリを実行するための単純なJDBC単体テストの作成です。これは、データベースのアップグレード後にJDBCドライバーの実行時の問題を検出するまでは、労力の無駄のように思われます(これは私に起こりました)。
大規模な変更(Springなどの互換性のないバージョンのフレームワーク間のアップグレードなど)の場合、自動化された機能テストまたは統合テストがある場合、または少なくともQA担当者が高レベルの機能を検証するために実行できる機能仕様がある場合に役立ちます。アップグレードするフレームワークAPIが十分に異なり、コードを大幅に変更する必要がある場合、単体テストは関連性がなくなる可能性があります。
あるバージョンの依存関係から別の互換性のないバージョンへの移行を管理する実際の戦術的な部分は、実際に何をしているかによって異なります。成熟したライブラリは、ある種の移行パスを提供し、うまくいけば、すべてを書き直す必要はありません。フレームワークのアップグレードに関連するコードの変更を、新機能の実装に関連する変更から分離することをお勧めします。このようにして、何かが壊れた場合、それはフレームワークのアップグレードに関係していることがわかり、新しい機能の実装中に壊れたものではありません。
これを非常に難しくしている理由の1つは、実行時にJVMに特定の依存関係のバージョンを1つしか持てないため、すべてのコードを一度に更新する必要があることです。OSGiは、同じ中で実行されているさまざまなOSGiバンドルがさまざまな依存関係バージョンに依存できるようにすることでこの特定の問題に対処するため、実行時にさまざまな依存関係バージョンに依存できます。これは、Eclipseが他のプラグインを壊すことなくプラグインの依存関係を管理する方法です。