正在尝试 运行 Scala 测试,得到 java.lang.ClassNotFoundException:org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner

Trying to run Scala test, getting java.lang.ClassNotFoundException: org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner

我在 IntelliJ IDEA 2016.2 中有一个 Gradle 项目。每次我 运行 项目中的 Scala 测试,我都会得到以下异常:

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:48)
Caused by: java.lang.ClassNotFoundException: org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:123)
    ... 5 more

我检查了依赖项的版本,并将 Scala SDK 添加到项目模块中。我还在 Gradle 文件中添加了 Scala 插件,并在 IntelliJ IDEA 中安装了 Scala 插件。此外,在我同事的计算机上测试 运行 没有错误,所以我们不知道错误可能是什么。

找到原因:我的用户目录名称中有一个重音字母,IDEA 总是尝试使用该目录下 AppData 中的某些文件。我已经更改了 idea.properties 文件,但它对该文件没有影响。

一种可能的解决方法是使用 gradle(或 maven/sbt/etc)。在我的例子中,我使用 gradle,我只是将 @RunWith(classOf[JUnitRunner]) 添加到我要测试的 scala class,然后执行 gradle 的测试任务。

对我来说,命令行长度限制的解决方案至关重要。 Idea 提供了大约 3 种方法来克服命令太长的问题。选择另一个并检查。

它在 运行 配置中。