結局のところ、Maven は libA の依存関係を取得する必要がありますが、そうではありませんでした。
いいえ、あなたの場合、libA は手動でインストールされ、libB の痕跡がどこにもないため、Maven は libA が必要とする推移的な依存関係を突然知ることはありません。
通常、推移的な依存関係は、デプロイされたアプリケーションの一部として利用可能なファイルのdependencies
セクションで定義された依存関係です。.pom
この.pom
ファイルは基本的に元のファイルのコピーでありpom.xml
、ライブラリ名を反映するように名前が変更されています (つまりartifactId-version.jar
、その後artifactId-version.pom
)。
依存関係を解決するとき、maven はその.pom
ファイルもチェックし、その依存関係 (推移的な依存関係になる) に関する情報を取得し、必要な依存関係グラフを構築 (およびフェッチ) します (つまり、それぞれに対して同じプロセスを繰り返し、宣言されたすべての依存関係)。
公式Maven から - 依存メカニズムの紹介
この機能は、指定されたリモート リポジトリから依存関係のプロジェクト ファイルを読み取ることで容易になります。一般に、これらのプロジェクトのすべての依存関係がプロジェクトで使用され、プロジェクトがその親や依存関係などから継承するものもすべて使用されます。
注:太字は私です。プロジェクト ファイルは通常、関連するアーティファクトが Maven リポジトリにアップロードされる (またはローカルの Maven キャッシュにインストールされる)と、pom.xml
ファイルに名前が変更されるファイルです。*.pom
あなたの質問から、あなたはを使用-DgeneratePom=true
したため、libA'pom.xml
ファイルを渡しませんでしたが、新しいファイルが自動的に生成されました
パラメータを介して何も指定されていない場合は、アーティファクトの最小限の POM を生成しますpomFile
。true
ローカル リポジトリに既存の POM がまだない場合のデフォルトです。
自動生成された.pom
ファイルはほとんど空になります (Maven 座標 (groupId、artifactId、version) ですがdependencies
、その中にセクションはありません)。そのため、Maven は libA を推移的な依存関係のないライブラリとして扱います。
したがって、次の 4 つのソリューションがあります (推奨順)。
- 企業環境では、エンタープライズ Maven リポジトリ(Arifactory、Nexus、Apache Archivia など) をセットアップし、これらのライブラリを適切にデプロイします。
- オプションを使用して libA を再インストールする
pomFile
か、または
dependencies
生成されたファイルにセクションを手動で追加し、.pom
そこに libB を追加するか、または
pom.xml
コンシューマーファイルで libB を明示的に宣言する
SOの詳細については、次を参照してください。