J'obtiens des exceptions ClassNotFoundException
et NoClassDefFoundError
lorsque je tente d'exécuter mon application avec une dépendance définie par maven.
J'ai ajouté ma dépendance maven pour le fichier jar en question à mon fichier pom.xml
avec la déclaration suivante:
<dependency>
<groupId>spy</groupId>
<artifactId>spymemcached</artifactId>
<version>2.8.4</version>
<scope>provided</scope>
</dependency>
Cela a ajouté le fichier JAR correspondant à mon dossier Maven Dependencies dans Eclipse. Je peux accéder aux classes en code mais je reçois les exceptions mentionnées une fois l'application lancée.
Le fichier jar est référencé dans mon chemin de génération Java sous les dépendances Maven:
Mon référentiel Maven local est ajouté à mon chemin de classe:
Lorsque j'essaie d'exécuter l'application, j'obtiens les deux exceptions suivantes:
Java.lang.NoClassDefFoundError: Lnet/spy/memcached/MemcachedClient;
Java.lang.ClassNotFoundException: net.spy.memcached.MemcachedClient
Est-ce que quelqu'un peut-il me montrer la bonne direction?
Remplacez provided
par compile
À condition de
Cela ressemble beaucoup à la compilation, mais indique que vous vous attendez à ce que le JDK ou un conteneur fournisse la dépendance au moment de l'exécution. Par exemple, lors de la création d'une application Web pour Java Enterprise Edition, vous devez définir la dépendance de l'API Servlet et des API Java EE associées sur la portée fournie, car le conteneur Web fournit ces classes. Cette portée est uniquement disponible sur le chemin de classe de compilation et de test et n'est pas transitive.
<scope>provided</scope>
La portée "Fourni" implique que les dépendances ne soient disponibles que pendant la phase de compilation et qu'elles soient disponibles ailleurs pendant l'exécution et que Maven ne devrait pas les regrouper avec le reste des fichiers jar et des classes de l'application actuelle.
Votre dépendance ne semble pas être de la "portée". Supprimez cette étendue de votre définition de dépendance et les pots seront présents dans votre pot/guerre/oreille emballé.
Je faisais face au même problème mais je n'avais pas l'étiquette définie sur mon POM, cela fonctionnait toujours bien jusqu'au jour où tout d'un coup, j'ai commencé à me donner cette erreur sur ma machine locale sans raison, la dépendance était correctement configurée dans le POM et le pot était présent dans le référentiel Maven local.
J'ai essayé de nettoyer le projet et de mettre à jour le projet Maven mais rien, aucune des solutions suggérées pour les autres postes ne fonctionnait pour moi non plus.
J'ai finalement réussi à le résoudre en accédant à l'onglet serveurs -> clic droit sur Tomcat v8.0 -> parcourir l'emplacement de déploiement
cela devrait vous conduire à un dossier temporaire comme
.metadata.plugins\org.Eclipse.wst.server.core\tmp1\wtpwebapps
puis vous naviguez dans votre dossier de projet -> WEB-INF -> lib -> ici, j’ai découvert que le fichier jar de la bibliothèque qui donnait l’erreur était manquant; je l’ai donc simplement copié à partir de .m2\repository
Le serveur a redémarré et il a recommencé à fonctionner normalement.
J'espère que cela aide un corps confronté au même problème.
Ajouter ci-dessous Dépendance, cela résoudra le problème.
<!-- 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>
Répondez à un problème lié à votre problème, mais pouvez quand même aider les autres.
Ajouter <scope>compile</scope>
à la dépendance n'était pas suffisant dans mon cas. J'ai également dû ajouter <packaging>jar</packaging>
au pom du module cible.