【问题标题】:Running JUnit Tests from Eclipse gives ClassNotFound Error从 Eclipse 运行 JUnit 测试会出现 ClassNotFound 错误
【发布时间】:2012-09-03 08:27:53
【问题描述】:

我正在尝试从 Eclipse 运行 JUnit 测试,但是在运行这些测试时,我收到了 ClassNotFound 异常

完整的堆栈跟踪如下:

java.lang.NoClassDefFoundError: of 引起:java.lang.ClassNotFoundException:的 在 java.net.URLClassLoader$1.run(URLClassLoader.java:202) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:190) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:307) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:248) 线程“main”中的异常

我在谷歌上搜索过这个问题,发现有几个人遇到了这个问题,但他们似乎都没有解决我的问题。这可能是由于平台不同

我的开发平台如下

OS: Windows XP
Eclipse JUNO
JUnit4
Maven2

同时,如果我使用 maven 运行这个项目,它运行得非常好。

对我来说最奇怪的部分是抛出ClassNotFound Exception 的类的名称。班级名称是of

这让我彻底震惊。

此外,我在上面列出的堆栈跟踪是我得到错误时得到的所有内容。

我已经被这个问题困扰了 2 天了,任何帮助将不胜感激。

【问题讨论】:

  • Does doing a Project->Clean on your project in Eclipse 解决问题吗?
  • 这是什么类?的??
  • ".ClassNotFoundException: ?? of ?? at ??"不是类名,它只是无法正确报告错误详细信息。 Maven 通常会在运行任何东西之前花一些时间设置项目 - 检查它添加到项目类路径中的内容,而这些内容在 eclipse 类路径中还没有。如果 没有在你的 main 方法中使用动态类加载器,我会怀疑它找不到 JUnit 类。
  • @ShivanDragon 不,我已经尝试过了,但没有帮助。
  • @PrasadSDeshpande 我不知道,这就是为什么我写的班级名称让我彻底震惊。

标签: eclipse maven-2 junit4 m2eclipse


【解决方案1】:

我尝试了这里和其他帖子中提到的所有内容。人们提供的一些解决方案是:

  1. 更改测试的输出文件夹
  2. 为将从 Maven 运行测试编译的项目创建自定义构建器
  3. 在项目构建路径的 Order and Export 列表中将 Maven 依赖项移到更高位置

还有很多很多,但我发现可以工作的一个如下:关闭开发环境。从我的本地 Maven 存储库中删除项目使用的 jar。打开 IDE。构建项目。运行测试。

经过数小时的敲击敲击键盘并遵循建议的解决方案后,这个解决方案奏效了!如果这不起作用,您可以尝试搜索我上面列出的解决方案。

【讨论】:

  • 在发布问题 4-5 天后突然测试开始为我工作,但我从未意识到,这是由于我出于其他原因而遵循的这些步骤,它开始工作。跨度>
  • 在我没有始终如一地在 Eclipse 中使用 maven 插件的环境中遇到问题:在 Eclipse 中将项目导入为 Maven 项目,但同时在终端中执行 mvn eclipse:cleanmvn eclipse:eclipse。删除 eclipse 中的项目并重新导入它对我有用,而无需删除本地 maven 存储库中的任何 jar。
【解决方案2】:

在Eclipse中右击项目名,选择“Maven --> update project”往往会解决这个问题。

【讨论】:

  • 不知道为什么这被否决了,因为这对我有用,所以我会投赞成票。在“更新 Maven 项目”对话框中,我还确保勾选了“强制更新快照/发布”和“清理项目”。一旦 Maven 更新完成,我的测试就会运行。另请注意:我使用的是 SpringSource ToolSuite 3.6.2 版
【解决方案3】:

我知道这个问题已经得到解答,但我仍然会在这里分享我的解决方案,

  1. 确保'src/test/java'的输出文件夹已经设置为'target/test-classes',这在很多其他帖子中已经说过了,这里不再赘述。

  2. 如果还是不行,很有可能是你的单元测试类的编译过程中出现了错误。转到“窗口”-> 打开“错误日志”视图,您应该可以看到错误消息的详细信息。

对于我的情况,之前下载的依赖 jar 由于网络问题以某种方式损坏,所以只需从本地存储库中删除 jar 并使用 'maven' -> 'update configuration' 再次下载它。

然后一切正常!

【讨论】:

    【解决方案4】:

    通常,当我们构建时,我们会在“运行配置选项卡”中选中“跳过测试”,而不是取消选中“跳过测试”并构建项目,junit 应该可以正常工作。这个解决方案对我有用。

    【讨论】:

      【解决方案5】:

      尝试在 eclipse 中将透视图切换到 JUnit 并再次运行测试

      【讨论】:

      • 那应该没什么区别吧?
      【解决方案6】:

      尽管我看到了所有答案和其他帖子。我将总结一下我的努力:

      可能是这个项目的配置不适合同一工作区中的其他项目。 (如何解决这可能是另一个问题)

      所以,关闭这个工作区,单独为这个项目启动一个干净的工作区。

      【讨论】:

        【解决方案7】:

        面临同样的问题。这个简单的步骤为我解决了这个问题。

        1. 从项目的构建路径中删除 JUnit 并重新添加。

        2. 如果设置为 自动构建,您的工作区将再次构建。如果未设置为自动构建,则构建您的项目。你的问题应该已经解决了。

        【讨论】:

          【解决方案8】:

          您应该添加您使用的类,例如(spring-boot):

          @RunWith(SpringRunner.class)
          @SpringBootTest(classes = {DataPoint.class})
          public class DataPointTest {
          
              @Test
              public void TestBuilder() {
                  DataPoint.Builder builder = new DataPoint.Builder();
          
                  DataPoint dataPoint = builder.withCount(4).withFirst(1).build();
          
                  assert dataPoint.getCount() == 4 && dataPoint.getFirst() == 1;
              }
          
          }
          

          【讨论】:

            【解决方案9】:

            您也可以查看 POM.xml 中的信息

            我有同样的问题。设置代码时我的项目名称不匹配。

            <groupId>CucumberTest</groupId>
            <artifactId>com.ProjectName</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <packaging>jar</packaging>
            
            <name>com.ProjectName</name>
            <url>http://maven.apache.org</url>
            

            在 POM.xml 中更改项目名称后,它工作正常。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2019-03-26
              • 1970-01-01
              • 2015-08-07
              • 2013-01-01
              • 2013-05-29
              • 1970-01-01
              • 2021-11-24
              相关资源
              最近更新 更多