私のプロジェクトPは依存関係Bに依存する依存関係Aに依存しています。私のプロジェクトのpom.xmlファイルには依存関係としてAが含まれており、そのjarはPのクラスパスに含まれています。ただし、Pの実行時にNoClassDefFoundError
がスローされます。これは、B jarがないために発生します。
Mavenはこれらの依存関係を自動的にダウンロードすべきではありませんか?
私のプロジェクトPは、依存関係B [コンパイルスコープ付き]に依存する依存関係A [コンパイルスコープ付き]に依存しています。
Bが オプションの依存関係 でない限り、Bは「compile(*)」スコープを持つPの依存関係である必要があります( Dependency Scope の表を参照し、注記を読んでください)ので、実行時に使用できるはずです。
ただし、Pの実行時にスローされるNoClassDefFoundErrorがあり、これはB jarがないために発生します。
Eclipseでプロジェクトを実行しているため、クラスパスが設定されているので、このレベルでの間違いは除外します。これにより、オプションの依存関係のケースが残ります。
PS:この種の問題を調査するのに非常に役立つツールはdependency:tree
。
この依存関係Aにcompileスコープがある場合-確かに、ダウンロードされ、さらにプロジェクトのクラスパスで利用できるようになります。しかし、providedスコープがあった場合、そうなります。提供されたdepはMavenによってアプリケーションにパッケージ化されないためです。
ところで、あなたはこのプロジェクトをどのように実行していますか-適切な方法で実行していないと、同様にこのような問題を引き起こす可能性があり、これは非常に良い推測です。たとえば、mavenを使用している場合 exec plugin -mavenはクラスパスを適切に設定しますが、それ以外の場合は、自分で設定する必要があります(または Assemblyプラグイン )。