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

Таким образом, OSG определенно должны быть в состоянии решить эту зависимость.

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


person Aaron Digulla    schedule 16.01.2014    source источник
comment
когда это происходит? А еще ты на Кеплере?   -  person Eugene    schedule 24.01.2014
comment
Я скачал Eclipse Kelper JEE SR1 (4.3.1). Моя целевая платформа была создана с использованием заархивированного сайта обновлений Xtext 2.4.3 и MWE2 2.4.1.   -  person Aaron Digulla    schedule 24.01.2014


Ответы (4)


Два очка

Первый

Проверьте свой 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 на целевую платформу.

person A Paul    schedule 24.01.2014
comment
Я использую JUnit 4. На вкладке библиотек перечислены два файла JAR JUnit. Один раз org.junit_4.11.0.*.jar с моей целевой платформы и один раз workspace/.metadata/.plugins/org.eclipse.pde.core/.external_libraries/org.junit_4.11.0.v201303080030/junit.jar. Я думаю, что последний добавлен в мою программу запуска JUnit Plugin Test. - person Aaron Digulla; 24.01.2014
comment
Тесты плагинов не имеют вкладки Classpath в Run Configurations. Но я проверил вкладку «Плагины». Там я увидел только org.eclipse.jdt.junit.runtime_3.4.400.v20130514-0733.jar с моей целевой платформы. Я вручную добавил org.eclipse.jdt.junit4.runtime_1.1.300.v20130514-0733.jar, но ошибка все та же :-( - person Aaron Digulla; 24.01.2014
comment
Вы были правы. Несмотря на то, что org.eclipse.xtext.junit4 импортирует org.junit 4.5.0, org.eclipse.xtext.junit (обратите внимание на отсутствующие 4 в конце), по-видимому, зависит от JUnit 3.8. После добавления старого, устаревшего пакета JUnit начались тесты плагина. - person Aaron Digulla; 28.01.2014

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

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 ( Быстрое исправление ) и выберите один из следующих вариантов:

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

Если не отображается, в вашей установке eclipse отсутствует плагин jUnit 4. В этом случае погуглите, как установить jUnit в eclipse.

person Aniruddh Joshi    schedule 30.01.2014
comment
это работает. Моя проблема в том, что сам Eclipse не запускался, когда на целевой платформе не было пакета org.junit 3.8. - person Aaron Digulla; 30.01.2014
comment
Я пытаюсь запустить тест плагина Eclipse JUnit. Смотрите мои правки к принятому ответу. - person Aaron Digulla; 30.01.2014

Возможно, у вас есть нерешенные проблемы в файле pom.xml. Откройте представление проблем и решите их соответствующим образом. Тогда в идеале вы сможете успешно запускать тестовые примеры, не сталкиваясь с исключением classnotfoundException.

person Raju Rao    schedule 17.02.2015
comment
Как я объяснил в принятом ответе, речь идет не о Maven. Ошибка возникает при запуске самого Eclipse. следовательно, в представлении о проблемах ничего нет. - person Aaron Digulla; 17.02.2015

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

  1. Декомпилируйте упомянутую вами банку (jar tvf или javap -classpath и укажите JAR) и проверьте ее зависимости
  2. Проверьте eclipse.ini некоторые переменные инициализации, которые можно было бы исправить.
person Menachem    schedule 24.01.2014