web-dev-qa-db-ja.com

Maven。推移的な依存関係

私のプロジェクトPは依存関係Bに依存する依存関係Aに依存しています。私のプロジェクトのpom.xmlファイルには依存関係としてAが含まれており、そのjarはPのクラスパスに含まれています。ただし、Pの実行時にNoClassDefFoundErrorがスローされます。これは、B jarがないために発生します。

Mavenはこれらの依存関係を自動的にダウンロードすべきではありませんか?

35
Jake

私のプロジェクトPは、依存関係B [コンパイルスコープ付き]に依存する依存関係A [コンパイルスコープ付き]に依存しています。

Bが オプションの依存関係 でない限り、Bは「compile(*)」スコープを持つPの依存関係である必要があります( Dependency Scope の表を参照し、注記を読んでください)ので、実行時に使用できるはずです。

ただし、Pの実行時にスローされるNoClassDefFoundErrorがあり、これはB jarがないために発生します。

Eclipseでプロジェクトを実行しているため、クラスパスが設定されているので、このレベルでの間違いは除外します。これにより、オプションの依存関係のケースが残ります。

PS:この種の問題を調査するのに非常に役立つツールはdependency:tree

25
Pascal Thivent

この依存関係Aにcompileスコープがある場合-確かに、ダウンロードされ、さらにプロジェクトのクラスパスで利用できるようになります。しかし、providedスコープがあった場合、そうなります。提供されたdepはMavenによってアプリケーションにパッケージ化されないためです。

ところで、あなたはこのプロジェクトをどのように実行していますか-適切な方法で実行していないと、同様にこのような問題を引き起こす可能性があり、これは非常に良い推測です。たとえば、mavenを使用している場合 exec plugin -mavenはクラスパスを適切に設定しますが、それ以外の場合は、自分で設定する必要があります(または Assemblyプラグイン )。

3
Bozhidar Batsov