某些ScalaTests无法从IDEA运行-NoSuchMethodError

rab*_*ens 5 scala intellij-idea scalatest

我有一个奇怪的问题:有时ScalaTests在IDEA中失败。我得到的是:

An exception or error caused a run to abort. This may have been caused by a problematic custom reporter.

java.lang.NoSuchMethodError: scala.runtime.ObjectRef.create(Ljava/lang/Object;)Lscala/runtime/ObjectRef;
    at org.scalatest.tools.Runner$.doRunRunRunDaDoRunRun(Runner.scala:2347)
    at org.scalatest.tools.Runner$$anonfun$runOptionallyWithPassFailReporter$2.apply(Runner.scala:1044)
    at org.scalatest.tools.Runner$$anonfun$runOptionallyWithPassFailReporter$2.apply(Runner.scala:1043)
    at org.scalatest.tools.Runner$.withClassLoaderAndDispatchReporter(Runner.scala:2722)
    at org.scalatest.tools.Runner$.runOptionallyWithPassFailReporter(Runner.scala:1043)
    at org.scalatest.tools.Runner$.run(Runner.scala:883)
at org.scalatest.tools.Runner.run(Runner.scala)
    at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.runScalaTest2(ScalaTestRunner.java:138)
    at org.jetbrains.plugins.scala.testingSupport.scalaTest.ScalaTestRunner.main(ScalaTestRunner.java:28)
    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:497)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Run Code Online (Sandbox Code Playgroud)

其他有相同问题的人应该设置一个选项“在编译器过程中运行工作表”,但是我在我的IDEA中找不到它。我没有文件->设置-> Scala应该位于的位置。

我该怎么办?

编辑:我研究了更多,真正奇怪的是:这是一个多模块SBT构建,并且在某些项目中测试有效。我创建了一个新模块,添加了一个非常简单的测试,并且该测试运行。只有一个模块中的测试失败,并显示此错误。

EDIT2:这似乎是捆绑的SBT编译器中的错误,请参阅此链接。现在,我清理了目录,删除了.ivy2文件夹,然后尝试重新导入所有内容,看看是否有任何更改。

rab*_*ens 3

我找到了这个的原因。这就是 IDEA 的 Scala 插件的工作原理。我的项目之前基于 Scala 2.11,我将其切换为使用 2.10,因为我使用为 Scala 2.10 构建的 Spark 添加了子模块,并且不知何故 IDEA 仍然选择 Scala 2.11 依赖项进行测试,即使我的整个项目现在使用 2.10。

我删除了我的.ivy2文件夹,清理了我的项目git clean -fdx所有内容重新导入到 IDEA 中,但这一次,我没有使用内置的 SBT,而是使用我安装在计算机上的 SBT。现在看来有效了。

因此,根据经验,在进行非常根本性的更改时,我将来会.ivy2从头开始删除并重新导入所有内容。