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 ?

2voto

RutgerDOW Points 1

Le test JUnit à partir d'Eclipse m'a également donné une erreur NoClassDefFoundError. L'exécution de 'mvn clean test' à partir de la ligne de commande m'a donné l'erreur suivante sur plusieurs pots : invalid LOC header (bad signature) La suppression de ces jars du dépôt m2 local et l'exécution de 'mvn clean test' à nouveau ont résolu mon problème. a résolu mon problème.

1voto

iunknown Points 11

Cliquer sur project->properties->Java build path->Source et vérifier chaque src existe toujours ou a été récemment supprimé. Corrigez les chemins d'accès manquants ou incorrects, puis reconstruisez et exécutez le test. Le problème sera résolu.

1voto

Siddharth Points 3828

Tout ce que j'ai fait, c'est Propriétés -> Java Build Path -> Order and Export -> Enabled all unchecked boxes -> move Junit all way up.

1voto

user2246725 Points 75

Essayé

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))

a travaillé après

Cycle de vie Maven 2 >> test

1voto

Gray Points 58585

J'ai essayé toutes les solutions sur cette page : rafraîchir le projet, reconstruire, tous les projets propres, redémarrer Eclipse, réimporter (même) les projets, reconstruire maven et rafraîchir. Rien n'a fonctionné. Qu'est-ce que a fait Le travail consistait à copier la classe sur un nouveau nom qui fonctionne très bien -- bizarre mais vrai.

Après avoir supporté cette situation pendant un certain temps, j'y ai remédié :

  1. Par l'intermédiaire de la Run menu
  2. Sélectionner Run Configurations
  3. Choisissez la configuration d'exécution associée à votre test unitaire.
  4. Suppression de l'entrée de la base de données Run Configuration en appuyant sur supprimer ou en cliquant sur le X rouge.

Quelque chose a dû se passer avec la configuration de l'exécution en cache.

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