ClassNotFoundException: junit.framework.TestCase ne peut pas être trouvé par org.eclipse.xtext.junit_2.4.3.v201309030823

Je suis perplexe par cette erreur:

java.lang.NoClassDefFoundError: junit/framework/TestCase at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:792) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188) at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClassHoldingLock(ClasspathManager.java:638) ... at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClass(RemoteTestRunner.java:693) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.loadClasses(RemoteTestRunner.java:429) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.pde.internal.junit.runtime.RemotePluginTestRunner.main(RemotePluginTestRunner.java:62) at org.eclipse.pde.internal.junit.runtime.CoreTestApplication.run(CoreTestApplication.java:23) ... Caused by: java.lang.ClassNotFoundException: junit.framework.TestCase cannot be found by org.eclipse.xtext.junit_2.4.3.v201309030823 at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 78 more 

L’exception se produit lorsque j’exécute les tests pour mon Xtext DSL en tant que tests de plug-in (c’est-à-dire lorsqu’une nouvelle plate-forme Eclipse est démarrée en interne). Cela se produit avant qu’aucun de mes codes ne soit exécuté.

Quand je regarde les dépendances du plugin, je peux voir que org.junit_4.11.0.v201303080030.jar est sur le org.junit_4.11.0.v201303080030.jar et je vois aussi /.../workspace/.metadata/.plugins/org.eclipse.pde.core/.external_libraries/org.junit_4.11.0.v201303080030/junit.jar

Donc, OSGis devrait certainement être capable de résoudre cette dépendance.

Xtext 2.4.3 fonctionne-t-il avec JUnit 4.11 ou dois-je rétrograder mon installation Eclipse vers JUnit 4.10?

Deux points

Premier

Vérifiez les Project Properties->Java Build Path->Libraries (tab) votre Project Properties->Java Build Path->Libraries (tab) . JUnit devrait être là bien que cela apparaisse généralement dans la construction.

Vérifiez les Run Configurations->JUnit->Classpath (tab ). JUnit doit être sous les entrées utilisateur pour votre projet.

Seconde

Vérifiez que vous avez des plugins ci-dessous

 org.eclipse.xtext.xbase.junit org.junit (3.8.2) org.junit (4.8.2) 

[EDIT] Cela m’a mis sur la bonne voie. Pour corriger l’erreur, assurez-vous d’avoir org.junit 3.8 sur la plate-forme cible !

Explication: L’erreur ci-dessus signifie qu’Eclipse lui-même n’a pas pu démarrer. Il semble que le coureur JUnit ait une dépendance sur JUnit 3.8. Il ne sera pas utilisé mais sans cela, toute la plate-forme ne peut pas être initialisée.

Vous pouvez voir si vous avez le même problème en consultant la trace de stack: contient-elle RemotePluginTestRunner.main ?

Pour corriger l’erreur, ajoutez le kit org.junit 3.8 à votre plate-forme cible.

Créez une classe avec le code ci-dessous dans votre projet-

 import static org.junit.Assert.*; import org.junit.After; import org.junit.Before; import org.junit.Test; public class TestJunitLib { @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Test public void test() { fail("Not yet implemented"); } } 

Lors de la sauvegarde si Eclipse indique des erreurs de compilation. Appuyez sur Ctrl + 1 (Correction rapide) et sélectionnez l’un des choix ci-dessous.

a) Ajouter la bibliothèque jUnit 4 au chemin de construction b) Corriger la configuration du projet

Si un n’apparaît pas, il manque le plug-in jUnit 4 dans votre installation Eclipse. Dans ce cas, google pour savoir comment installer jUnit dans Eclipse.

Vous avez peut-être des problèmes non résolus dans votre fichier pom.xml. Ouvrez la vue des problèmes à résoudre en conséquence. Ensuite, idéalement, vous pourrez exécuter les tests avec succès sans rencontrer l’exception classnotfoundexception.

Deux endroits possibles à vérifier pour plus de détails:

  1. javap -classpath jar que vous avez mentionné ( jar tvf ou javap -classpath et spécifiez le javap -classpath JAR), puis vérifiez sa dépendance.
  2. eclipse.ini dans eclipse.ini des variables d’initialisation qui pourraient éventuellement être corrigées.