Java ClassNotFoundException:org.eclipse.xtext.junit_2.4.3.v201309030823找不到junit.framework.TestCase

Java ClassNotFoundException:org.eclipse.xtext.junit_2.4.3.v201309030823找不到junit.framework.TestCase,java,eclipse,junit4,xtext,Java,Eclipse,Junit4,Xtext,我对这个错误感到困惑: 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.DefaultClassLoad

我对这个错误感到困惑:

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
当我将xtextdsl的测试作为插件测试运行时(即在内部启动新的Eclipse平台时),会发生异常。这发生在执行我的任何代码之前

当我查看插件依赖项时,我可以看到
org.junit_4.11.0.v20130308030.jar
位于类路径上,我还可以看到
/…/workspace/.metadata/.plugins/org.eclipse.pde.core/.external_库/org.junit_4.11.0.v203008030/junit.jar

所以OSGis肯定能够解决这种依赖性

Xtext 2.4.3是否与JUnit 4.11配合使用,还是必须将Eclipse安装降级到JUnit 4.10?

两点

首先

检查
项目属性->Java构建路径->库(选项卡)
。JUnit应该在那里,尽管它通常会出现在构建中

检查项目的
运行配置->JUnit->类路径(tab
)。JUnit应该位于项目的用户条目下

检查你有以下插件

org.eclipse.xtext.xbase.junit
org.junit (3.8.2)
org.junit (4.8.2)
[编辑]这让我走上了正确的道路。要修复此错误,请确保您在中有org.junit 3.8

说明:上面的错误意味着Eclipse本身无法启动。JUnit运行程序似乎依赖于JUnit3.8。它不会被使用,但如果没有它,整个平台就无法初始化

通过查看堆栈跟踪,您可以看到是否存在相同的问题:它是否包含
remotepluginterunner.main


要修复此错误,请将org.junit 3.8捆绑包添加到您的目标平台。

可以在两个地方查看更多详细信息:

  • 反编译您提到的jar(
    jartvf
    javap-classpath
    并指定jar),并检查其依赖项
  • 检查eclipse.ini中一些可能被修复的初始化变量

  • 在项目中使用以下代码创建一个类-

    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) 将JUnit4库添加到buildpath b) 修复项目设置

    如果没有出现,则eclipse安装缺少JUnit4插件。
    在这种情况下,谷歌将研究如何在eclipse中安装jUnit。

    您的pom.xml文件中可能存在未解决的问题。打开“问题”视图,相应地解决问题。理想情况下,您将能够成功运行测试用例,而不会遇到classnotfoundexception。

    什么时候会发生这种情况?你也在开普勒吗?我已经下载了EclipseKelperJeeSR1(4.3.1)。我的目标平台是使用XTEXT2.4.3存档更新站点和MWE22.4.1构建的。我使用的是JUnit4。“库”选项卡列出了两个JUnit JAR。Once org.junit_4.11.0.*.jar和Once
    workspace/.metadata/.plugins/org.eclipse.pde.core/.external_libraries/org.junit_4.11.0.v20130308030/junit.jar
    。我认为后者是在JUnit插件测试启动器中添加的。插件测试在运行配置中没有类路径选项卡。但是我检查了插件标签。在那里,我只在我的目标平台上看到了
    org.eclipse.jdt.junit.runtime_3.4.400.v20130514-0733.jar
    。我手动添加了
    org.eclipse.jdt.junit4.runtime_1.1.300.v20130514-0733.jar
    ,但错误仍然是一样的:-(您是正确的。尽管
    org.eclipse.xtextext.junit4
    导入了
    org.junit4.5.0
    org.eclipse.xtextextext.junit
    (注意末尾缺少的“4”)似乎对JUnit 3.8有依赖关系。添加旧的、过时的JUnit捆绑包后,插件测试开始了。这很有效。我的问题是,当org.JUnit 3.8捆绑包不在目标平台中时,Eclipse本身没有启动。我正在尝试运行Eclipse JUnit插件测试。请参阅我对已接受答案的编辑。正如我在已接受的回答,这与Maven无关。错误发生在Eclipse本身启动时。因此,problems视图中没有任何内容。