Maven定義の依存関係を使用してアプリケーションを実行しようとすると、ClassNotFoundException
およびNoClassDefFoundError
例外が発生します。
次の宣言を使用して、問題のjarのMaven依存関係をpom.xml
ファイルに追加しました。
<dependency>
<groupId>spy</groupId>
<artifactId>spymemcached</artifactId>
<version>2.8.4</version>
<scope>provided</scope>
</dependency>
これにより、関連するJARファイルがEclipseのMaven Dependenciesフォルダーに追加されました。コードでクラスにアクセスできますが、アプリケーションを実行すると、前述の例外が発生します。
Jarは、my Java Maven依存関係の下のビルドパスで参照されます。
ローカルMavenリポジトリがクラスパスに追加されます。
アプリケーションを実行しようとすると、次の2つの例外が発生します。
Java.lang.NoClassDefFoundError: Lnet/spy/memcached/MemcachedClient;
Java.lang.ClassNotFoundException: net.spy.memcached.MemcachedClient
誰かが私を正しい方向に向けることができますか?
provided
をcompile
に変更します
提供
これはコンパイルによく似ていますが、実行時にJDKまたはコンテナが依存関係を提供することを示しています。たとえば、Java Enterprise EditionのWebアプリケーションを構築する場合、サーブレットAPIおよび関連するJava EE APIに依存関係を提供するスコープに設定します。 Webコンテナはこれらのクラスを提供しますこのスコープはコンパイルおよびテストクラスパスでのみ使用でき、推移的ではありません。
<scope>provided</scope>
「提供される」スコープは、依存関係がコンパイル段階でのみ使用可能であり、実行時に他の場所で使用可能であり、Mavenが現在のアプリケーションの残りのjarおよびクラスとパッケージ化しないことを意味します。
あなたの依存関係は「提供された」スコープではないようです。依存関係定義からそのスコープを削除すると、jarはパッケージ化されたjar/war/earに存在します。
私は同じ問題に直面していましたが、POMで定義されたタグを持っていませんでしたが、ある日突然突然エラーがローカルマシンでエラーを与えて依存関係が正しく設定されるまで、それは常に正常に動作していましたPOMおよびjarはローカルのMavenリポジトリに存在していました。
私はプロジェクトをきれいにしてmavenプロジェクトを更新しようとしましたが、何もしませんでした。
私はついにサーバータブに行くことによってそれを解決することができました-> Tomcat v8.0を右クリック->展開場所を参照
これは、次のような一時フォルダにつながるはずです
.metadata.plugins\org.Eclipse.wst.server.core\tmp1\wtpwebapps
次に、プロジェクトフォルダを参照します-> WEB-INF-> lib->ここで、エラーを与えていたライブラリのjarが見つからないことがわかったので、.m2\repositoryからコピーしました
サーバーを再起動し、通常どおり再び機能し始めました。
これが、同じ問題に直面している身体の助けになることを願っています。
以下の依存関係を追加すると、問題が解決します。
<!-- https://mvnrepository.com/artifact/info.cukes/cucumber-jvm-deps -->
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-jvm-deps</artifactId>
<version>1.0.3</version>
<scope>provided</scope>
</dependency>
あなたの問題にいくらか関連した答えをしてください、しかし、それでも他の人を助けることができます。<scope>compile</scope>
を依存関係に追加しても、私の場合は十分ではありませんでした。また、<packaging>jar</packaging>
をターゲットモジュールのPOMに追加する必要がありました。