我刚刚将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”。如何解决此问题并重新启用单元测试?
答案 0 :(得分:18)
目前的m2e插件仍有一些反面。单元测试用例无法运行,因为它们的包含项目分组在工作集中。以下可能有所帮助:
然后尝试再次运行测试。
答案 1 :(得分:5)
好吧,我似乎必须自己回答这个问题。
这个问题的主要原因仍然是m2eclipse eclipse插件。此插件的新版本不支持一个项目中的嵌套模块。如果我们真的需要查看多个模块,我们必须从包资源管理器中删除旧模块并创建工作集并使用“import existing maven projects”选项再次导入项目。 eclipse导入向导将弹出一个窗口,询问您要导入哪个模块。然后我们可以选择所有模块并完成导入。因此,工作集将包含项目的所有模块,并将每个模块视为一个单独的项目,尽管在工作区中您的模块仍在一个项目中。通过这样做,它解决了我在Eclipse中遇到的与类路径相关的所有问题,例如无法搜索类或无法运行单元测试并获得java.lang.ClassNotFoundException。
供参考,这是一篇教你如何创建工作集的文章: Working set
我认为您可以在不创建新工作集的情况下导入项目,但工作集会将属于您项目的所有模块保留在一个集合中,以便更容易组织。
我希望两个月前得到答案,所以我不会花太多时间寻找解决方案。
答案 2 :(得分:4)
我想我找到了解决方案,至少这对我有用: 右键单击该项目并选择“Maven” - > '更新依赖关系'
然后当我尝试时,我没有得到ClassNotFoundException。
答案 3 :(得分:2)
我尝试了这里和其他帖子中提到的所有内容。人们提供的一些解决方案是:
有很多很多,但我找到的工作如下:
经过几个小时的敲击我的键盘并遵循建议的解决方案,这个有效!
答案 4 :(得分:2)
在尝试运行JUnit测试类时,我们也遇到了相同的ClassNotFoundException。但是当我们尝试使用以下步骤时,它已成功开始运行。
答案 5 :(得分:0)
作为解决方法,尝试运行mvn test-compile
(在Eclipse中或从命令行运行),然后尝试在Eclipse中运行Junit测试。