在Eclipse中运行JUnit单元测试时使用ClassNotFoundException(使用Maven)

时间:2011-05-12 06:58:46

标签: eclipse unit-testing maven maven-plugin classnotfoundexception

我刚刚将SpringSource Tools Suite(STS,Eclipse的变体IDE)升级到最新版本(v3.6.1)。然后我的所有JUnit单元测试都无法再次运行。我收到了这个错误:

Class not found ClassToTest
java.lang.ClassNotFoundException: ClassToTest
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)

根据这篇博客: ClassNotFoundException when running JUnit unit tests within Eclipse (using Maven), 这是因为Eclipse中的一些Maven插件配置错误。但是,在STS 3.6.2中,我在Maven插件中找不到此选项“Include Modules”。如何解决此问题并重新启用单元测试?

6 个答案:

答案 0 :(得分:18)

目前的m2e插件仍有一些反面。单元测试用例无法运行,因为它们的包含项目分组在工作集中。以下可能有所帮助:

  1. 右键单击项目,包括junit-tests。
  2. 选择 Maven - >禁用工作区解析
  3. 然后尝试再次运行测试。

答案 1 :(得分:5)

好吧,我似乎必须自己回答这个问题。

这个问题的主要原因仍然是m2eclipse eclipse插件。此插件的新版本不支持一个项目中的嵌套模块。如果我们真的需要查看多个模块,我们必须从包资源管理器中删除旧模块并创建工作集并使用“import existing maven projects”选项再次导入项目。 eclipse导入向导将弹出一个窗口,询问您要导入哪个模块。然后我们可以选择所有模块并完成导入。因此,工作集将包含项目的所有模块,并将每个模块视为一个单独的项目,尽管在工作区中您的模块仍在一个项目中。通过这样做,它解决了我在Eclipse中遇到的与类路径相关的所有问题,例如无法搜索类或无法运行单元测试并获得java.lang.ClassNotFoundException。

供参考,这是一篇教你如何创建工作集的文章: Working set

我认为您可以在不创建新工作集的情况下导入项目,但工作集会将属于您项目的所有模块保留在一个集合中,以便更容易组织。

我希望两个月前得到答案,所以我不会花太多时间寻找解决方案。

答案 2 :(得分:4)

我想我找到了解决方案,至少这对我有用: 右键单击该项目并选择“Maven” - > '更新依赖关系'

然后当我尝试时,我没有得到ClassNotFoundException。

答案 3 :(得分:2)

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

  1. 更改测试类的输出文件夹。
  2. 为将从Maven运行test-compile的项目创建自定义构建器。
  3. 在项目构建路径的“订单和导出”列表中将Maven依赖项移到更高位置。
  4. 有很多很多,但我找到的工作如下:

    1. 关闭开发环境。
    2. 从我的本地Maven存储库中删除项目使用的jar。
    3. 打开IDE。
    4. 构建项目。
    5. 运行测试。
    6. 经过几个小时的敲击我的键盘并遵循建议的解决方案,这个有效!

答案 4 :(得分:2)

在尝试运行JUnit测试类时,我们也遇到了相同的ClassNotFoundException。但是当我们尝试使用以下步骤时,它已成功开始运行。

  1. 选择您的项目。
  2. 单击eclipse IDE中工具栏中显示的项目选项。
  3. 选择“干净”。
  4. 现在尝试运行测试文件。

答案 5 :(得分:0)

作为解决方法,尝试运行mvn test-compile(在Eclipse中或从命令行运行),然后尝试在Eclipse中运行Junit测试。