Eclipse-java.lang.ClassNotFoundException


Lorsque j'essaie de démarrer mon JUnit-Test depuis Eclipse, j'obtiens une "ClassNotFoundException". Lors de l'exécution de "mvn test" à partir de la console - tout fonctionne bien. En outre, aucun problème n'est signalé dans Eclipse.

Ma structure de projet est la suivante:

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

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

Voici ma configuration d'exécution JUnit: texte alternatif 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("", ""));
    }
}
Author: Eric Leschinski, 2009-06-27

30 answers

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

Vérifiez le chemin de construction de votre projet et activez des dossiers de sortie spécifiques pour chaque dossier. Allez un par un dans chaque dossier source de votre projet et définissez le dossier de sortie que maven utiliserait.

Par exemple, le src/main/java de votre projet Web devrait avoir target/classes sous le projet web, les classes de test devraient avoir target/test-classes également sous le projet Web et ainsi.

En utilisant ceci la 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 qui sont sous les ressources, assurez-vous d'inclure ce dossier en tant que dossier source et de faire la bonne configuration du chemin de construction.

J'espère que ça aide.

 190
Author: Carlos, 2014-12-05 00:06:57

L'approche de Carlos a aidé! Eclipse - java.lang.ClassNotFoundException

Essayez de vérifier le chemin de classe de la configuration junit run:

  1. Ouvrez vos configurations d'exécution
  2. Cliquez sur le JUnit-Test que vous souhaitez démarrer
  3. allez dans l'onglet classpath
  4. Essayez d'ajouter un dossier (cliquez sur entrées utilisateur, cliquez sur avancé, cliquez sur ajouter des dossiers, cliquez sur ok et recherchez dans le outputfolder vos classes de test (celles que vous trouvez sous projektproperties java build path, source))

Fonctionne pour moi.

 46
Author: CoffeJunky, 2017-05-23 11:33:15

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 exécuter."là, vous devriez voir un arbre à gauche avec JUnit en option. ouvrez ce nœud et recherchez et sélectionnez votre test. dans le volet de droite, vous verrez un onglet pour classpath. jetez un oeil pour vous assurer que votre classe que le test essaie d'instancier serait trouvée.

Modifier:

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

  • placer maven dans le bootclasspath AU-DESSUS des travaux jre, ou
  • exécuter mvn clean test fait l'affaire ou
  • l'actualisation de tous vos projets eclipse, provoquant une reconstruction corrige le problème
  • aller à votre projet et sélectionner Maven- > Mettre à jour la configuration résoudre le problème

Avec les trois premiers, il y avait rapports de la question récurrente. le dernier me semble le mieux, mais si cela ne fonctionne pas, essayez les autres.

Ici et ici est une info

 16
Author: akf, 2009-06-28 00:34:51

Le problème peut être le fichier de classe manquant dans votre dossier de génération. Une solution consiste à nettoyer le projet et à le reconstruire.

 4
Author: EvilFish, 2012-08-03 16:29:20

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

Bravo Ramon Buckland

 3
Author: , 2009-09-12 23:39:45

Il y a beaucoup de suggestions alambiqué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 non déplacez) le cas de test du problème (.java) via terminal/file browser vers un autre emplacement, right-click -> Delete dans Eclipse et choisissez de supprimer sur le disque lorsque l'option est donnée, déplacez/copiez le fichier copié vers l'emplacement du fichier d'origine, puis sélectionnez votre projet dans Eclipse. Eclipse et appuyez sur F5 pour actualiser les ressources.

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

 3
Author: KomodoDave, 2012-09-10 13:51:25

J'ai eu exactement le même problème mais je l'ai compris! Allez dans votre fichier de projet et faites un clic droit dessus, puis cliquez sur Refresh ou appuyez sur F5. Puis essayer 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 une poubelle.

 3
Author: Starfox275, 2012-09-19 22:50:21

Sachin a raison: Même avec un chemin de classe correct, l'onglet Problèmes montrera qu'une dépendance ou la Ressource/projet a une erreur qui doit être corrigée pour que maven puisse automatiquement créer et créer des classes lorsque vous créez ou apportez une modification à votre classe de test.

"Salut,

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

Un 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 le onglet problème et vérifiez si votre projet manque quelque chose / fichier. 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 le dossier workspace/proj/bin/package/ pour les classes )

C'est bizarre mais vrai , ecplise échouait dans la compliation 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
Author: kisna, 2011-04-05 14:06:29

Nous avions l'exception exacte (en utilisant les outils SpringSource, tomcat, sur Win7) et la cause était que nous avions refactorisé un nom de fichier (renommé un fichier) à partir du sous-domaine.java au sous-domaine.java (D vs d) et en quelque sorte il est entré en collision bien que SpringSource affichait le nouveau sous-domaine de nom.Java. La solution consistait à supprimer le fichier (via SpringSource) et à le créer à nouveau sous le nom de sous-domaine.java et copier-coller son ancien contenu. Simple que cela.

 2
Author: Romie, 2012-05-04 11:01:40

J'ai Tout de Propriétés -> Java Build Path -> de l'Ordre et de l'Exportation -> Activé toutes les cases non cochées -> déplacé Junit tout le chemin jusqu'

 2
Author: Siddharth, 2013-04-04 13:27:01

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

 2
Author: wanfke, 2016-10-08 06:38:33

Hmm, l'air 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 en sortir.

Vérifiez que vous avez également activé la génération automatiquement. Si vous voulez vous assurer que vos classes de test sont compilées correctement, effacez le dossier cible Maven (et tout dossier bin qu'Eclipse peut utiliser). Utilisez-vous également m2eclipse, car je trouve que c'est un peu problématique.

 1
Author: Jon, 2009-06-27 18:08:57

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 découvert cela que lorsque j'ai désactivé les paramètres de validation. C'est-à-dire qu'il y avait tellement d'erreurs dans les fichiers JSP, etc., que les erreurs classpath n'étaient pas évidentes (ou peut-être même apparentes). En conséquence, rien n'était compilé dans la sortie de destination dossiers, mais aucune erreur utile sur pourquoi.

 1
Author: Mike, 2010-08-13 21:35:57

Cliquez sur project->properties->Java build path->Source et vérifiez chaque dossier src est toujours valide existe ou récemment supprimé. Corrigez tout chemin manquant ou chemin incorrect et reconstruisez et exécutez le test. Il va corriger le problème.

 1
Author: iunknown, 2012-10-26 05:49:43

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

Travaillé après

Maven 2 Cycle de vie > > test

 1
Author: user2246725, 2013-04-09 19:55:02

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

Après avoir supporté cela pendant un certain temps, je viens de le réparer par:

  1. Via le menu Run
  2. Sélectionnez Run Configurations
  3. Choisissez la configuration d'exécution associée avec votre test unitaire.
  4. Suppression de l'entrée du {[2] } en appuyant sur supprimer ou en cliquant sur le X rouge.

Quelque chose a dû être foiré avec la configuration d'exécution mise en cache.

 1
Author: Gray, 2013-04-11 23:11:23

J'ai également été touché par ce problème et j'ai pu trouver une solution suffisante pour mon cas. Si votre projet Eclipse a un.fichier classpath dans la racine de votre projet (voir dans Navigator view au lieu de Package Explorer View), assurez-vous que votre Maven classpathentry apparaît avant votre JRE Container classpathentry.

<?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 n'a pas de .fichier classpath, vous pouvez modifier le chemin de construction Java de votre projet pour changer la commande et l'exportation. Si votre projet a l' .fichier classpath et vous ne modifiez votre commande que dans le chemin de construction Java, vous verrez que la commande n'est pas affectée et le problème continuera à se produire.

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

 1
Author: cmh, 2013-04-12 09:05:16

La suppression du projet d'eclipse (pas du disque dur) qui, d'une certaine manière, nettoie l'espace de travail et réimporte le projet dans eclipse a de nouveau fonctionné pour moi.

 1
Author: Hari Hara Earlapati, 2013-10-20 23:49:18

Habituellement, ce problème se produit lors de l'exécution d'une application java java outil impossible de trouver le fichier de classe.

Principalement dans le projet maven, nous voyons ce problème car Eclipse-Maven sync problème. Pour résoudre ce problème :Maven->Configuration de mise à Jour

 1
Author: Premraj, 2018-01-04 04:09:33

Avez-vous essayé de faire un clic droit sur la racine de votre projet, en sélectionnant "propriétés" et en vous assurant que le CHEMIN de classe est correct? Si je me souviens bien, c'est comment vous le faites.

Quelque chose sur la façon dont Eclipse exécute des tests unitaires qui vous oblige à ajouter le JAR junit au CHEMIN de classe d'exécution d'une manière spéciale?

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

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

 0
Author: duffymo, 2009-06-27 16:26:47

Veuillez pointer pour corriger JDK à partir de Windows > Préférences > Java > JRE installé.

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

Ci-après, le problème a disparu et les tests JUnit fonctionnent correctement.

Merci,
- Tapas

 0
Author: Tapas Adhikary, 2012-06-27 05:20:33

J'ai récemment rencontré la même erreur dans Eclipse, c'est-à-dire que l'E Eclipse n'a pas pu trouver la classe de test unitaire, quelle que soit la façon dont je modifie les configurations. Apprenant des articles précédents ici et dans d'autres sites Web, j'ai vérifié et vérifié trois fois le chemin de classe et les informations source, et déplacé de haut en bas le dossier source et les bibliothèques, dans les fenêtres de configuration "Exécuter la configuration" et "Java Build Path", et j'ai également nettoyé le projet et reconstruit, mais aucune des astuces je. Le projet Java spécifique est un ancien projet compilé ANT et contient de nombreux jars inclus dans la bibliothèque Eclipse.

Ensuite, j'ai changé la classe de test unitaire pour ajouter une méthode main() et cliquez dessus avec le bouton droit pour "Exécuter en tant qu'application Java" au lieu de JUnit test, et soudainement, Eclipse semble se réveiller et identifier correctement la classe. Par la suite, je l'ai retourné à une application de test unitaire, et cela fonctionne toujours.

Cela semble être un bug dans Eclipse, je devine le grand nombre de les bibliothèques (>260) peuvent confondre la capacité de la JVM à localiser ma classe JUnit.

 0
Author: Hongyu Zhang, 2013-01-26 01:07:14

Assurez-vous que votre configuration de lancement de test ne contient PAS les lignes suivantes, OU 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
Author: thSoft, 2013-04-12 09:05:41

J'ai essayé tout ce que j'ai lu dans ce long article et, incroyablement, ce qui a fonctionné pour moi était, plutôt que de cliquer sur la classe de test et de sélectionner Run as JUnit test, de cliquer sur la méthode de test et de s'exécuter en tant que JUnit test. Je n'ai aucune idée de pourquoi?

 0
Author: snakedog, 2013-09-10 15:49:43

Le test JUnit de l'intérieur eclipse m'a également donné NoClassDefFoundError. L'exécution de 'mvn clean test' à partir de la ligne de commande m'a donné une erreur suivante sur plusieurs pots: en-tête LOC non valide (mauvaise signature) Suppression de ces fichiers jar du référentiel m2 local et exécution à nouveau de "mvn clean test" résolu mon problème.

 0
Author: RutgerDOW, 2013-11-27 10:17:07

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

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

mvn clean eclipse:eclipse

Ii). Actualisez le projet et réexécutez votre test junit. Devrait fonctionner correctement.

 0
Author: Vikram, 2014-04-18 21:45:53

De plus, VÉRIFIEZ la boîte de dialogue eclipse "Web Deployment Assembly".

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

Récemment, j'ai eu un plugin eclipse modifier l'un de mes projets Web, et il a ajouté ~mystérieusement~ ajouté les répertoires de test maven /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é juste directement maven vers tomcat, non ClassNotFoundExceptions... Cependant, quand j'ai fait le déploiement via Eclipse, Whammo!! Je commence à obtenir ClassNotFoundExceptions car le TestCode est déployé.

Eric

 0
Author: Eric Manley, 2014-10-20 16:41:45

Cela signifie votre pom.xml a des problèmes non résolus. Ouvrez la vue problèmes résoudre en conséquence. Ensuite, vous pourrez exécuter les cas de test avec succès sans rencontrer l'exception classnotfoundexception.

 0
Author: Raju Rao, 2015-02-17 12:45:07

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

  1. Faites un clic droit sur le projet et accédez au chemin de construction du projet.
  2. Accédez à l'onglet, Commander et exporter et déplacez la bibliothèque système JRE après les sources.

Cela devrait le réparer.

 0
Author: Sai Killi, 2015-07-21 15:31:18

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

 0
Author: Mahendra Rathod, 2015-12-10 14:25:52