mavenで依存関係をダウンロードするときの規則
Mavenの依存関係解決のルールは以下に集約される。
- 依存性の推移性: あるプロジェクトが別のプロジェクトに依存する場合、Mavenはその依存プロジェクトに関わるJARファイルを自動的に解決してダウンロードします。その依存プロジェクトがさらに他のプロジェクトに依存する場合も、Mavenはそのプロジェクトに関わるJARファイルを自動的に解決してダウンロードします。
- バージョンの競合:複数のプロジェクトが同じプロジェクトの異なるバージョンに依存する場合、Maven は特定の競合解決ルールに従って使用するバージョンを決定します。通常、Maven は最新のバージョンを選択します。ただし、pom.xml ファイルで必要なバージョンを明示的に指定することで競合を解決することもできます。
- 依存範囲:Mavenでは、compile、provided、runtime、testなど複数の依存範囲を用意しています。それぞれの範囲に対応する依存関係は、異なる段階で引き渡され使用されます。
- ネイティブに翻訳すると:compile: 既定の依存範囲は、コンパイル、テスト、実行などのフェーズで引き継がれ、使用されます。
- コンパイル・テスト段階で利用されるのみで、最終のリリースパッケージにはバンドルされません。
- 実行時:コンパイルやテスト時には使用されず、実行時に渡されたり使用されたりする。
- テスト時のみ渡され、使用され、コンパイルとパッケージングには参加しません。
- 依存関係の除外: ある場合、特定の推移的依存関係を排除する必要があり、Maven の exclude タグを使用して特定の依存関係を排除できます。
Mavenでは、依存関係の解決と推移的依存関係の解析を行うことで、プロジェクトの依存関係を構築。衝突解決ルールと依存範囲に基づき、使用する依存関係のバージョンが決定されます。