web-dev-qa-db-fra.com

Eclipse - Java.lang.ClassNotFoundException

En essayant de démarrer mon JUnit-Test à partir d'Eclipse, j'obtiens une "ClassNotFoundException". Lorsque vous exécutez "mvn test" depuis la console, tout fonctionne correctement. De plus, aucun problème n’est signalé dans Eclipse.

Ma structure de projet est la suivante:

  • projet parent (pom-packaging)
    • Projet Web (war-packaging - mon test JUnit est ici)
    • Projet Flex
    • Projet de configuration

edit: Comment la classe peut-elle ne pas être trouvée? C'est une simple application HelloWorld sans bibliothèques spéciales.

Voici la configuration de mon JUnit: alt text http://www.walkner.biz/_temp/runconfig.png


Testclass (mais comme je l'ai dit; cela ne fonctionne pas non plus avec un simple HelloWorld ...):

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import biz.prognoserechnung.domain.User;
import biz.prognoserechnung.domain.UserRepository;
import biz.prognoserechnung.domain.hibernate.UserHibernateDao;

public class UserDaoTest {
/**
 * the applicationcontext.
 */
private ApplicationContext ctx = null;

/**
 * the user itself.
 */
private User record = null;

/**
 * Interface for the user.
 */
private UserRepository dao = null;

@Before
public void setUp() throws Exception {
String[] paths = { "WEB-INF/applicationContext.xml" };
ctx = new ClassPathXmlApplicationContext(paths);
dao = (UserHibernateDao) ctx.getBean("userRepository");
}

@After
public void tearDown() throws Exception {
dao = null;
}

@Test
public final void testIsUser() throws Exception {
Assert.assertTrue(dao.isUser("John", "Doe"));
}

@Test
    public final void testIsNoUser() throws Exception {
    Assert.assertFalse(dao.isUser("not", "existing"));
        Assert.assertFalse(dao.isUser(null, null));
        Assert.assertFalse(dao.isUser("", ""));
    }
}
90
swalkner

J'ai rencontré cette situation plusieurs fois et, après de nombreuses tentatives, j'ai trouvé la solution.

Vérifiez le chemin de génération de votre projet et activez des dossiers de sortie spécifiques pour chaque dossier. Parcourez un à un chaque dossier source de votre projet et définissez le dossier de sortie que maven utiliserait. 

Par exemple, src/main/Java de votre projet Web doit avoir target/classes sous le projet Web, les classes de test doivent également avoir target/test-classes également sous le projet Web, etc.

Cette configuration vous permettra d’exécuter des tests unitaires dans Eclipse.

Encore un conseil: si les tests de votre projet Web nécessitent des fichiers de configuration situés sous les ressources, veillez à inclure ce dossier en tant que dossier source et à définir le chemin de génération approprié.

J'espère que ça aide.

192
Carlos

Approche Carlos aidé! Eclipse - Java.lang.ClassNotFoundException

Essayez de vérifier le chemin d'accès aux classes de la configuration d'exécution du junit:

  1. Ouvrez vos configurations d'exécution
  2. Cliquez sur le test jUnit que vous souhaitez démarrer
  3. aller à l'onglet classpath
  4. Essayez d'ajouter un dossier (cliquez sur les entrées utilisateur, cliquez sur avancé, cliquez sur ajouter des dossiers, cliquez sur ok et recherchez dans le dossier de sortie vos classes de test (celles que vous trouverez sous projektproperties Java build path, source)

travaille pour moi.

46
CoffeJunky

votre chemin de classe de construction est correct, c'est pourquoi vous pouvez compiler. le chemin de classe de votre JUnit doit être vérifié. allez dans le menu Exécuter et choisissez "Ouvrir la boîte de dialogue d'exécution". vous devriez y voir un arbre à gauche avec JUnit en option. ouvrez ce noeud et trouvez et sélectionnez votre test. sur le volet de droite, vous verrez un onglet pour classpath. Jetez un coup d'œil pour vous assurer que votre classe que le test tente d'instancier serait trouvée.

modifier:

cela semble être un problème avec maven et son comportement après la publication par une version des dossiers de sortie par défaut d'Eclipse. j'ai vu des solutions décrites où 

  • placer maven dans le bootclasspath AU-DESSUS du jre, ou 
  • exécuter mvn clean test fait le tour ou 
  • l'actualisation de tous vos projets Eclipse, entraînant une reconstruction corrige le problème
  • aller dans votre projet et sélectionner Maven-> Update Configuration pour résoudre le problème

avec les trois premiers, le problème était récurrent. le dernier me semble préférable, mais si cela ne fonctionne pas, essayez les autres.

ici et ici quelques infos

17
akf

Il se peut que le problème manque au fichier de classe dans votre dossier de construction. Une solution consiste à nettoyer le projet et à le reconstruire. 

4
EvilFish

C'était ma solution au problème. Bien sûr, beaucoup de choses peuvent le provoquer. Pour moi, c’était que Maven2 (pas le plugin pour Eclipse) configurait le profil Eclipse pour utiliser un constructeur différent (aspectJ) mais je n’avais pas le plugin dans Eclipse./

http://rbtech.blogspot.com/2009/09/Eclipse-galileo-javalangclassnotfoundex.html

À la vôtre Ramon Buckland

3
Ramon

J'ai eu exactement le même problème mais je l'ai compris! Accédez à votre fichier de projet et cliquez dessus avec le bouton droit de la souris, puis cliquez sur Refresh ou appuyez sur F5. Ensuite, essayez de l'exécuter. Si cela ne fonctionne toujours pas, alors oubliez-le, car j'avais le même problème EXACT et cela signifie simplement que votre version d'Eclipse est sans fondement.

3
Starfox275

Il y a beaucoup de suggestions compliquées ici.

J'ai rencontré ce problème plusieurs fois avec des projets Maven après avoir déplacé des ressources par glisser-déposer ou effectué une refactorisation des noms de classe.

Si cela se produit, copiez simplement (et ne déplacez pas) le problème (.Java) via le navigateur de terminal/fichier vers un autre emplacement, right-click -> Delete dans Eclipse et choisissez de supprimer sur le disque lorsque l'option vous est proposée, déplacez/copiez le fichier copié dans le fichier d'origine puis sélectionnez votre projet dans Eclipse et appuyez sur F5 pour actualiser les ressources.

Ceci est rapide et facile à faire, et a résolu le problème de façon permanente pour moi à chaque fois.

3
KomodoDave

Sachin a raison: Même avec le chemin de classe correct, l'onglet problèmes montrera que certaines dépendances ou que la ressource/projet comporte une erreur qui doit être corrigée pour que maven puisse créer et créer automatiquement des classes lorsque vous créez ou modifiez votre classe de test.

"Salut,

C'est très vieux juillet (quelle année) mais j'ai eu le même problème.

Le problème réel a révélé qu'Eclipse n'était pas en mesure de générer un fichier de classe pour le fichier Java, classpath était approprié.

Voir l'onglet problème et vérifier s'il manque quelque chose/fichier à votre projet. vous pouvez créer un nouveau projet et ajouter des fichiers un par un et les construire jusqu'à ce qu'il cesse de compiler et de créer des classes (vérifiez l'espace de travail/proj/bin/package/folder pour les classes)

son étrange mais vrai, ecplise échouait dans la conformité parce que 4 des 20 fichiers Java utilisaient une seule image qui manquait. et par conséquent, aucun fichier Java n'a été compilé.

CLASSPATH n'est pas un problème ici. "

2
kisna

Je résous ce chemin Bulit ---> bibliothèques ---> ajouter une bibliothèque ---> Junit check junit4

2
wanfke

Nous avions l'exception exacte (à l'aide de SpringSource Tools, Tomcat, sur Win7) et la raison en était que nous avions refactoré un nom de fichier (renommé un fichier) de SubDomain.Java en Subdomain.Java (D vs d) et qu'il était entré en collision même si SpringSource montrant le nouveau nom Subdomain.Java. La solution consistait à supprimer le fichier (via SpringSource), à ​​le recréer sous le nom Subdomain.Java et à copier-coller de son contenu précédent. Aussi simple que cela.

2
Romie

Tout ce que je faisais était Propriétés -> Chemin de construction Java -> Ordre et exportation -> Activé toutes les cases non cochées -> Junit déplacé à fond

1
Siddharth

Supprimer le projet d’Eclipse (pas du disque dur) qui nettoie en quelque sorte l’espace de travail et réimporter le projet dans Eclipse a de nouveau fonctionné pour moi.

1

J'avais essayé toutes les solutions de cette page: actualiser le projet, reconstruire, nettoyer tous les projets, redémarrer Eclipse, réimporter (même) les projets, reconstruire le maven et actualiser. Rien n'a fonctionné. Ce que a fait était en train de copier la classe dans un nouveau nom qui fonctionne bien - bizarre mais vrai.

Après avoir supporté cela pendant un certain temps, je viens de le corriger en:

  1. Via le menu Run
  2. Sélectionnez Run Configurations
  3. Choisissez la configuration d'exécution associée à votre test unitaire.
  4. Supprimez l'entrée du Run Configuration en appuyant sur Suppr ou en cliquant sur le X rouge.

Quelque chose a dû être gâché avec la configuration d'exécution en cache.

1
Gray

A tenté  

Link : [here][1]

Open your run configurations
Click on the jUnit-Test you want to start
go to the classpath tab
Try to add a folder (click on user entries, click on advanced, click on add folders,click on ok and search the outputfolder for your test classes(those you find under projektproperties Java build path, source))

travaillé après  

Maven 2 LifeCycle >> test 

1
user2246725

Hmm, semble un peu bizarre, essayez de l'exécuter avec l'annotation suivante en haut de la classe:

@RunWith(SpringJUnit4ClassRunner.class)
public class UserDaoTest {
}

et laissez-moi savoir comment vous vous en sortez. 

Vérifiez que vous avez également activé automatiquement la création. Si vous souhaitez vous assurer que vos classes de test sont correctement compilées, supprimez le dossier cible Maven (et tout dossier bin utilisé par Eclipse). Utilisez-vous également m2Eclipse, car je trouve cela un peu problématique.

1
Jon

J'ai également été touché par ce problème et j'ai pu trouver une solution suffisante pour mon cas. Si votre projet Eclipse contient un fichier .classpath à la racine du projet (consultez-le dans la vue Navigateur au lieu de la vue Explorateur de packages), assurez-vous que votre classe classpathentry apparaît avant votre classe class JRE.

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="con" path="org.maven.ide.Eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
    <classpathentry kind="con" path="org.Eclipse.jdt.launching.JRE_CONTAINER"/>
</classpath>

Si votre projet ne possède pas de fichier .classpath, vous pouvez modifier le chemin de construction Java de votre projet pour passer de l'ordre à l'exportation. Si votre projet contient le fichier .classpath et que vous ne modifiez votre ordre que dans le chemin de construction Java, vous verrez que cet ordre n'est pas affecté et que le problème continue de se produire.

Et un projet -> propre ne fait jamais de mal aux choses après avoir effectué le changement.

1
cmh

Généralement, ce problème se produit lors de l'exécution de l'outil Java de l'application Java, incapable de trouver le fichier de classe. 

Surtout dans le projet maven, nous voyons ce problème car Eclipse-Maven sync issue. Pour résoudre ce problème: Maven-> Update Configuration  

1
Premraj

cliquez sur project->properties->Java build path->Source et vérifiez que chaque dossier src est toujours valide, existant ou récemment supprimé. Corrigez tout chemin manquant ou incorrect, puis reconstruisez et exécutez le test. Cela résoudra le problème.

1
iunknown

La solution à mon problème qui était similaire: les bibliothèques étaient invalides. Si vous regardez dans le fichier .classpath du projet, vous verrez des balises classpathentry avec la clé/valeur kind = "lib". Certains des miens étaient incorrects.

Je n'ai pas découvert cela avant d'avoir désactivé les paramètres de validation. C'est-à-dire qu'il y avait tellement d'erreurs dans les fichiers JSP, etc. En conséquence, rien n'a été compilé dans les dossiers de sortie de destination, mais aucune erreur utile expliquant pourquoi.

1
Mike

lors de l'exécution d'applications Web La plupart d'entre nous auront cette exception. Lorsque vous avez cette erreur, vous devez placer les fichiers .class dans le dossier approprié. 

Dans les applications Web, tous les fichiers .class doivent figurer dans le dossier WEB-INF\Classes . Si vous utilisez l'application Web dans Eclipse, procédez comme suit.

Étape 1: Cliquez avec le bouton droit sur le dossier Projet et sélectionnez Propriétés Étape 2: Cliquez sur "Chemin de construction Java" pour afficher différents onglets tels que "source", "projets", "bibliothèques", etc. Étape 3: sélectionnez Source. dossier. étape 4: dans le dossier "Source", vous verrez l’option Dossier de sortie par défaut. vous devez donner ici le dossier des classes sous WEB-INF . il suffit de donner le chemin tel que nom_projet/WebContent/WEB-INF/classes la structure dépend de votre application rappelez-vous ici que vous n'avez pas besoin de créer un dossier "classes". Eclipse le créera pour vous . Étape 5: cliquez sur "OK" et nettoyez le projet et construisez-le. Voilà, votre application va s'exécuter maintenant.

0
Sahitya M

J'ai eu le même problème. Tout ce que j'ai fait était 

je). Artefacts Eclipse générés 

mvn clean Eclipse:eclipse

ii). Actualisez le projet et réexécutez votre test Junit. Devrait bien fonctionner. 

0
Vikram

En outre, VÉRIFIEZ DOUBLEMENT la boîte de dialogue Eclipse "Web Deployment Assembly". 

Cela peut être trouvé: Propriétés du projet-> Assemblée de déploiement. 

Récemment, un plug-in Eclipse a modifié l'un de mes projets Web. Il a ajouté ~ mystérieusement ~ les répertoires maven test/src/test/Java,/src/test/resources à l'assemblage de déploiement. UGGGG !!! 

C’est pourquoi mon projet a bien fonctionné lorsque j’ai construit et déployé des solutions directement à Tomcat, sans aucune exception ClassNotFoundExceptions ... Cependant, lorsque j’ai effectué le déploiement via Eclipse, Whammo !! Je commence à recevoir ClassNotFoundExceptions car le TestCode est en cours de déploiement. 

Eric

0
Eric Manley

J'ai vu Eclipse - Java.lang.ClassNotFoundException lors de l'exécution de tests junit. J'avais supprimé l'un des fichiers JAR externes ajoutés au projet. Après avoir supprimé la référence de ce fichier JAR au projet à partir d’Eclipse. Je pourrais exécuter les tests Junit.

0
user7639086

J'utilise gradle avec Eclipse et je suis confronté au même défi aujourd'hui. J'ai essayé un certain nombre de solutions, mais la seule solution qui m'a aidé était d'exécuter la commande gradlew clean.

P.S. => Ne combinez pas le "build" avec la commande mentionnée ci-dessus.

M'a aidé, tentez votre chance.

0
NIKHIL CHAURASIA

J'ai récemment rencontré une erreur similaire dans Eclipse, c’est-à-dire qu’Eclipse IDE ne parvenait pas à trouver la classe de test des unités, quelle que soit la façon dont je modifiais les configurations. Tirant les enseignements des publications précédentes ici et d'autres sites Web, j'ai vérifié et vérifié trois fois les informations de chemin de classe et de source, et parcouru les répertoires et les bibliothèques de sources, à la fois dans "Exécuter la configuration" et dans "Chemin de génération Java". msgstr "" "Config windows, et j’ai également nettoyé le projet et l’ai reconstruit, mais aucune des astuces ne fonctionne pour moi. Le projet Java spécifique est un ancien projet compilé ANT et contient de nombreux fichiers jar inclus dans la bibliothèque Eclipse.

Ensuite, j'ai modifié la classe de test unitaire pour ajouter une méthode main () et cliquez dessus avec le bouton droit de la souris pour "Exécuter en tant que" une application Java au lieu du test JUnit. Soudainement, Eclipse semble se réveiller et identifier correctement la classe. Ensuite, je suis revenu à une application de test unitaire et elle fonctionne toujours.

Cela semble être un bogue dans Eclipse. Je suppose que le grand nombre de bibliothèques (> 260) peut perturber la capacité de la JVM de localiser ma classe JUnit. 

0
Hongyu Zhang

Exécuter le projet en tant que test Maven, puis Exécuter en tant que JUnit Test.

0
Yao Li

Veuillez pointer pour corriger le JDK sous Windows> Préférences> Java> JRE installé.

Ne pointez pas sur jre, pointez sur un JDK approprié. J'ai pointé à JDK 1.6U29 et actualisé le projet.

Le problème est résolu et jUnit Tests fonctionne correctement.

Merci,
- Tapas

0
Tapas Adhikary

La modification de l'ordre des artefacts de classpath dans le chemin de construction Java l'a résolu pour moi.

  1. Cliquez avec le bouton droit sur le projet et sélectionnez Chemin de construction du projet.
  2. Accédez à, cliquez sur Ordre et exportation et déplacez la bibliothèque système JRE après les sources.

Cela devrait résoudre le problème.

0
Sai Killi

Cela signifie que votre fichier pom.xml présente des problèmes non résolus. Ouvrez la vue des problèmes à résoudre en conséquence. Vous pourrez ensuite exécuter les tests avec succès sans rencontrer l’exception classnotfoundexception.

0
Raju Rao

JUnit 4.4 n'est pas pris en charge par l'intégration JMockit/JUnit. Seules les versions 4.5 et plus récentes sont prises en charge. 

0
Mahendra Rathod

Allez dans le chemin de construction -> Source et activez l'option "Ignorer les problèmes de compilation facultatifs" pour tous les dossiers source.

0
pavelb

Assurez-vous que votre configuration de lancement de test ne contient PAS les lignes suivantes. OR essayez d'activer la gestion automatisée des dépendances Maven.

<stringAttribute key="org.Eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.maven.ide.Eclipse.launchconfig.classpathProvider"/>
<stringAttribute key="org.Eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.maven.ide.Eclipse.launchconfig.sourcepathProvider"/>
0
thSoft

Avez-vous essayé de cliquer avec le bouton droit de la souris sur la racine de votre projet, en sélectionnant "propriétés" et en vous assurant que CLASSPATH est correct? Si je me souviens bien, c'est comme ça que vous le faites.

Quelque chose à propos de la façon dont Eclipse exécute les tests unitaires, ce qui vous oblige à ajouter le fichier JAR Junit au runtime CLASSPATH de manière spéciale?

J'utilise IntelliJ, donc je n'ai pas ces problèmes. 

Je vérifierais moi-même Eclipse, mais je préfère ne pas l'avoir sur mon bureau.

0
duffymo

J'ai essayé tout ce que j'ai lu dans ce long post et, chose incroyable, ce qui a fonctionné pour moi a été plutôt que de cliquer sur la classe de test et de sélectionner Run as JUnit test, de cliquer sur le test method et de l'exécuter comme JUnit test. Je ne sais pas pourquoi?

0
snakedog

J'ai fait face au même problème, pour moi le problème est différent. Cela vient du fait que certaines dépendances maven ne sont pas téléchargées. 

a. I went through properties -> Java Buildpath -> Maven Dependencies and identified the missed libraries. 
b. Removed the missed libraries artifacts from pom.xml
c. Downloaded the libraries and added them explicitly.
0
Hari Krishna

Le test JUnit depuis Eclipse m'a également fourni NoClassDefFoundError . L'exécution de 'mvn clean test' à partir de la ligne de commande m'a donné l'erreur suivante sur plusieurs fichiers jar: et en exécutant 'test propre mvn' à nouveau résolu mon problème.

0
RutgerDOW