IDEA中的scalatest编译错误

798qvoo8  于 2024-01-05  发布在  Scala
关注(0)|答案(7)|浏览(168)

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

  1. sbt
  2. > compile
  3. > test:compile

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

  1. Error:(37, 11) exception during macro expansion:
  2. 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;
  3. at org.scalatest.AssertionsMacro$.assert(AssertionsMacro.scala:34)
  4. assert((ElementMeasures.baseElementDistance(mEl1, mEl2) - 0.33333).abs < 0.001)
  5. ^


对于测试中的每个assert函数。
build.sbt文件包含以下内容:

  1. name := "ner-scala"
  2. organization := "ml.generall"
  3. version := "1.0-SNAPSHOT"
  4. scalaVersion := "2.11.8"
  5. libraryDependencies += "org.scalactic" %% "scalactic" % "3.0.0"
  6. libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.0" % "test"
  7. ...

bhmjp9jg

bhmjp9jg1#

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

  1. <exclusion>
  2. <artifactId>scalactic_2.11</artifactId>
  3. <groupId>org.scalactic</groupId>
  4. </exclusion>

字符串

chy5wohz

chy5wohz2#

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

  1. "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等!):

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

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

  1. SBT project import
  2. [warn] Multiple dependencies with the same organization/name but different versions.
  3. [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构建配置。

相关问题