7

プロジェクトがあり、Maven にライブラリをインストールして、そのプロジェクトで使用できるようにする必要があります。私が遭遇した問題は、上記のライブラリ、たとえばlibAには、サードパーティの依存関係であるlibB自体が依存していることです。

このコードを使用して、ローカル リポジトリに両方を追加しました。

mvn install:install-file -Dfile=VerBDConverter.jar -DgroupId=verbdconverter
-DartifactId=verbdconverter -Dversion=1.00 -Dpackaging=jar -DgeneratePom=true  

lib 2でも同じことをしました。問題は、プロジェクトのpomに移動してlibAの<依存関係>を追加すると、MavenがlibBを取得しないことです。

質問: 結局のところ、Maven は libA の依存関係を取得する必要がありますが、取得していません。

4

2 に答える 2

16

結局のところ、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 を生成しますpomFiletrueローカル リポジトリに既存の POM がまだない場合のデフォルトです。

自動生成された.pomファイルはほとんど空になります (Maven 座標 (groupId、artifactId、version) ですがdependencies、その中にセクションはありません)。そのため、Maven は libA を推移的な依存関係のないライブラリとして扱います。


したがって、次の 4 つのソリューションがあります (推奨順)。

  • 企業環境では、エンタープライズ Maven リポジトリ(Arifactory、Nexus、Apache Archivia など) をセットアップし、これらのライブラリを適切にデプロイします。
  • オプションを使用して libA を再インストールするpomFileか、または
  • dependencies生成されたファイルにセクションを手動で追加し、.pomそこに libB を追加するか、または
  • pom.xmlコンシューマーファイルで libB を明示的に宣言する

SOの詳細については、次を参照してください。

于 2016-04-11T21:43:37.757 に答える
-2

これはあなたを助けるかもしれません:

call mvn install:install-file -Dfile=sqljdbc.jar -DgroupId=com.microsoft.jdbc -DartifactId=sqljdbc1 -Dversion=1.0 -Dpackaging=jar
call mvn install:install-file -Dfile=sqljdbc4.jar -DgroupId=com.microsoft.jdbc -DartifactId=sqljdbc4 -Dversion=4.0 -Dpackaging=jar
call mvn install:install-file -Dfile=sqljdbc41.jar -DgroupId=com.microsoft.jdbc -DartifactId=sqljdbc41 -Dversion=4.1 -Dpackaging=jar

ソース: https://github.com/Programmercito/osbo-framework/blob/master/libs/instala.bat

于 2016-04-11T21:38:15.863 に答える