IDEA中的scalatest编译出错

gen*_*all 14 scala intellij-idea sbt

我正在尝试编译包含scalatest的Scala项目.它在sbt上编译正常

sbt
> compile
> test:compile
Run Code Online (Sandbox Code Playgroud)

,但是当我尝试使用IDEA构建它时,它显示以下错误:

Error:(37, 11) exception during macro expansion: 
java.lang.NoSuchMethodError: org.scalactic.BooleanMacro.genMacro(Lscala/reflect/api/Exprs$Expr;Ljava/lang/String;Lscala/reflect/api/Exprs$Expr;)Lscala/reflect/api/Exprs$Expr;
at org.scalatest.AssertionsMacro$.assert(AssertionsMacro.scala:34)
assert((ElementMeasures.baseElementDistance(mEl1, mEl2) - 0.33333).abs < 0.001)
      ^
Run Code Online (Sandbox Code Playgroud)

对于assert测试中的每个功能.

build.sbt 文件包含以下内容

name := "ner-scala"
organization := "ml.generall"
version := "1.0-SNAPSHOT"
scalaVersion := "2.11.8"
libraryDependencies += "org.scalactic" %% "scalactic" % "3.0.0"
libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.0" % "test"
...
Run Code Online (Sandbox Code Playgroud)

Ale*_*xey 15

这也可能意味着您注册了多个版本的scalatest.我遇到了与assert上的编译时错误相同的问题

  • 使用`dependencyOverrides + ="org.scalatest"%%"scalatest"%"3.0.1"`来解决这个问题.奇怪的是:我的sbt构建工作,但IDEA构建失败 - 尽管我已经在IDEA中打开了一个项目作为sbt项目. (3认同)

med*_*ale 15

我遇到了同样的问题,正如Alexey描述的那样(他应该得到upvote但我没有足够的声誉来支持或评论 - 谢谢Alexey),这似乎是由于我的项目中有多个版本的scalatest .我能够通过专门从引入它的库中排除旧的scalatest来修复它(请注意,排除需要指定scala二进制版本,例如_2.11等!):

...exclude("org.scalatest", "scalatest_2.11")
Run Code Online (Sandbox Code Playgroud)

在排除之前的事件日志中也有警告:

SBT project import
[warn] Multiple dependencies with the same organization/name but different versions.
[warn]  * org.scalatest:scalatest_2.11:(2.2.6, 3.0.1)
Run Code Online (Sandbox Code Playgroud)


key*_*int 1

我认为你的 IntelliJ 缺少库scalatest

从 IntelliJ 中,转到Project Structure-> Project Settings-> Libraries->+符号 -> From Maven-> 搜索scalatest正确的版本

添加scalatestIntelliJ 库后,assert错误应该消失。

这不是一个有保证的解决方案,请尝试一下:)