IDEA中的scalatest编译错误

798qvoo8  于 12个月前  发布在  Scala
关注(0)|答案(7)|浏览(137)

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

sbt
> compile
> test:compile

字符串
,但当我尝试使用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)
      ^


对于测试中的每个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"
...

bhmjp9jg

bhmjp9jg1#

只排除org.scalatest组对我不起作用。在分析我的mvn依赖时,我不得不同时排除scalactic_{scala_binary_version}组。

<exclusion>
  <artifactId>scalactic_2.11</artifactId>
  <groupId>org.scalactic</groupId>
</exclusion>

字符串

chy5wohz

chy5wohz2#

我也有类似的问题,但排除org.scalatest并没有解决它。
因此,我排除了org.scalactic

"com.stackoverflow" %% "troublesome-library" % "1.0.420" excludeAll(ExclusionRule(organization="org.scalactic"))

字符串

daupos2t

daupos2t3#

多年来,scalatest的MockitoSugar特征从scalatest移到了mockito。
在我的情况下,我有一个多继承问题,我的测试类直接使用org.mockito.scalatest.MockitoSugar,另一个扩展trait使用了旧的org.scalatest.mockito.MockitoSugar
如果您将所有现有的org.scalatest.mockito.MockitoSugar导入替换为org.mockito.scalatest.MockitoSugar,则此问题将消失。

zfycwa2u

zfycwa2u4#

这也可能意味着你注册了不止一个版本的scalatest。

qnakjoqk

qnakjoqk5#

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

...exclude("org.scalatest", "scalatest_2.11")

字符串
在排除之前,事件日志中也有一个警告:

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)

v1l68za4

v1l68za46#

我认为您的IntelliJ缺少库scalatest
从IntelliJ,转到Project Structure-> Project Settings-> Libraries-> +符号-> From Maven->搜索正确版本的scalatest
在为IntelliJ添加scalatest库之后,assert错误应该消失。
这不是一个有保证的解决方案,只是给予它一个尝试:)

oo7oh9g9

oo7oh9g97#

有时候,Intellij IDEA编译scala的方式和sbt编译scala的方式之间存在不兼容的地方。你可以尝试让IDEA编译为sbt,而不是默认编译。
在sbt视图中,您需要打开sbt设置。

一旦它被打开,你可以启用“buildings”复选框。正如IDEA所指出的,它被推荐用于导致IDEA编译无法正常工作的sbt构建配置。

相关问题