ClassNotFoundException:org.eclipse.xtext.junit_2.4.3.v201309030823找不到junit.framework.TestCase
我对这个错误感到困惑:
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平台时),会发生exception。 这在我的任何代码执行之前发生。
当我查看插件依赖项时,我可以看到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?
两点
第一
检查Project Properties->Java Build Path->Libraries (tab)
。 JUnit应该在那里,虽然这通常会出现在构建中。
检查Project的Run Configurations->JUnit->Classpath (tab
)。 JUnit应该在您的项目的用户条目下。
第二
检查你有以下插件
org.eclipse.xtext.xbase.junit org.junit (3.8.2) org.junit (4.8.2)
[编辑]这让我走上正轨。 要修复错误,请确保在目标平台中安装了org.junit 3.8!
说明:上述错误意味着Eclipse本身无法启动。 似乎JUnit运行器依赖于JUnit 3.8。 它不会被使用但没有它,整个平台都无法初始化。
您可以通过查看堆栈跟踪来查看是否存在相同的问题:它是否包含RemotePluginTestRunner.main
?
要修复错误,请将org.junit 3.8软件包添加到目标平台。
在项目中使用以下代码创建一个类 –
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(快速修复)并选择以下其中一项 –
a)将jUnit 4库添加到构建路径b)修复项目设置
如果没有出现你的eclipse安装缺少jUnit 4插件。 在这种情况下谷歌了解如何在eclipse中安装jUnit。
您的pom.xml文件中可能有未解决的问题。 打开问题视图解决相应问题。 理想情况下,您将能够成功运行测试用例而不会遇到classnotfoundexception。
两个可能的地方检查更多细节:
- 反编译你提到的jar(
jar tvf
或javap -classpath
并指定JAR),并检查它的dependecies - 检查
eclipse.ini
是否有可能修复的初始化变量。