ClassNotFoundException: junit.framework.TestCase не может быть найдено org.eclipse.xtext.junit_2.4.3.v201309030823

Я озадачен этой ошибкой:

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

Исключение случается, когда я запускаю тесты для своих Xtext DSL в качестве тестов плагинов (т.е. когда новая платформа Eclipse запускается внутри). Это происходит до любого из моих кодов.

Когда я смотрю на зависимости плагина, я вижу, что org.junit_4.11.0.v201303080030.jar находится в пути к классам, и я также вижу /.../workspace/.metadata/.plugins/org.eclipse.pde.core/.external_libraries/org.junit_4.11.0.v201303080030/junit.jar

Поэтому OSGis определенно сможет решить эту зависимость.

Работает ли Xtext 2.4.3 с JUnit 4.11 или мне нужно понизить установку Eclipse до JUnit 4.10?

Ответ 1

Две точки

Первая

Проверьте Project Properties->Java Build Path->Libraries (tab). JUnit должен быть там, хотя обычно это будет отображаться в сборке.

Проверьте проект Run Configurations->JUnit->Classpath (tab). JUnit должен находиться под пользовательскими записями для вашего проекта.

Второй

Убедитесь, что у вас есть под плагинами

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

[EDIT] Это привело меня к правильному пути. Чтобы исправить ошибку, убедитесь, что у вас org.junit 3.8 на целевой платформе !

Объяснение: Ошибка выше означает, что Eclipse сам не смог запустить. Кажется, что бегун JUnit имеет зависимость от JUnit 3.8. Он не будет использоваться, но без него вся платформа не может быть инициализирована.

Вы можете увидеть, есть ли у вас такая же проблема, посмотрев на трассировку стека: содержит ли она RemotePluginTestRunner.main?

Чтобы исправить ошибку, добавьте пакет org.junit 3.8 на целевую платформу.

Ответ 2

Создайте класс с кодом ниже в вашем проекте -

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");
}

}

При сохранении, если eclipse показывает ошибки компилятора. Нажмите Ctrl + 1 (Quick Fix) и выберите один из ниже -

a) Добавьте библиотеку jUnit 4 в путь buildpath b) Исправить настройку проекта

Если a не появляется, в вашем затмении не будет установлен плагин jUnit 4. В этом случае google о том, как установить jUnit в eclipse.

Ответ 3

У вас могут быть нерешенные проблемы в файле pom.xml. Открыть решение проблемы решить соответственно. Тогда, в идеале, вы сможете успешно запускать тестовые примеры, не сталкиваясь с classnotfoundexception.

Ответ 4

Два возможных места для проверки более подробной информации:

  • Декомпилируйте указанную банку (jar tvf или javap -classpath и укажите JAR) и проверьте ее зависимости
  • Отметьте eclipse.ini для некоторых переменных инициализации, которые могут быть исправлены.