102 votes

Eclipse - java.lang.ClassNotFoundException

Lorsque j'essaie de lancer mon test JUnit à partir d'Eclipse, j'obtiens une "ClassNotFoundException". Lorsque j'exécute "mvn test" à partir de la console, tout fonctionne correctement. De même, aucun problème n'est signalé dans Eclipse.

La structure de mon 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 être introuvable ? Il s'agit d'une simple application HelloWorld sans aucune bibliothèque particulière.

Voici la configuration d'exécution de mon JUnit : texte alt 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("", ""));
    }
}

3 votes

J'obtiens la même erreur en essayant d'exécuter une simple classe HelloWorld sans JUnit... Plus exactement : java.lang.NoClassDefFoundError : HelloWorld Caused by : java.lang.ClassNotFoundException : HelloWorld

0 votes

Une exception ClassNotFoundException est levée lors de la réflexion sur une classe. NoClassDefFoundError est levée lorsque vous essayez d'utiliser la classe dans un appel de méthode normal.

0 votes

Pouvez-vous montrer le code de votre classe de test ?

3voto

KomodoDave Points 2605

Il y a de nombreuses suggestions alambiquées dans ce domaine.

J'ai rencontré ce problème à plusieurs reprises avec des projets Maven après avoir déplacé des ressources par glisser-déposer, ou après avoir effectué un remaniement des noms de classes.

Dans ce cas, il suffit de copier (et non de déplacer) le cas de test problématique ( .java ) par l'intermédiaire d'un terminal ou d'un navigateur de fichiers 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é vers l'emplacement du fichier original, puis sélectionnez votre projet dans Eclipse et appuyez sur F5 pour actualiser les ressources.

C'est rapide et facile à faire, et cela a résolu le problème de façon permanente à chaque fois.

2voto

C'est la solution que j'ai trouvée pour résoudre le problème. Bien sûr, de nombreuses choses peuvent provoquer ce problème. 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

Santé Ramon Buckland

2voto

user469718 Points 35

Sachin a raison : Même si le chemin de la classe est correct, l'onglet problems montrera qu'une dépendance ou la ressource/projet contient une erreur qui doit être corrigée pour que maven construise et crée automatiquement des classes lorsque vous créez ou modifiez votre classe de test.

"Bonjour,

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

Le problème actuel est qu'Eclipse n'a pas été en mesure de générer un fichier de classe pour le fichier Java, alors que le chemin d'accès était correct.

Vous pouvez créer un nouveau projet et ajouter les fichiers un par un et les construire jusqu'à ce qu'il arrête de compiler et de créer des classes (vérifiez le dossier workspace/proj/bin/package/ pour les classes).

C'est bizarre mais vrai, ecplise échouait dans la compilation parce que 4 des 20 fichiers java utilisaient une seule image qui était manquante. et par conséquent aucun des fichiers java n'était compilé.

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

2voto

Romie Points 21

Nous avons eu l'exception exacte (en utilisant SpringSource Tools, tomcat, sur Win7) et la cause était que nous avions refactorisé un nom de fichier (renommé un fichier) de SubDomain.java à Subdomain.java (D vs d) et d'une manière ou d'une autre il y a eu collision alors que SpringSource affichait le nouveau nom Subdomain.java. La solution a été de supprimer le fichier (via SpringSource) et de le recréer sous le nom Subdomain.java en copiant-collant son ancien contenu. C'est aussi simple que cela.

2voto

Starfox275 Points 19

J'ai eu exactement le même problème mais j'ai trouvé la solution ! Allez dans votre fichier de projet et faites un clic droit dessus, puis cliquez sur Refresh ou appuyez sur F5. Essayez ensuite de l'exécuter. Si cela ne fonctionne toujours pas, oubliez-le, car j'ai eu EXACTEMENT le même problème et cela signifie simplement que votre version d'Eclipse est pourrie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X