我试图编译包含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"
...
型
7条答案
按热度按时间bhmjp9jg1#
只排除org.scalatest组对我不起作用。在分析我的mvn依赖时,我不得不同时排除scalactic_{scala_binary_version}组。
字符串
chy5wohz2#
我也有类似的问题,但排除
org.scalatest
并没有解决它。因此,我排除了
org.scalactic
:字符串
daupos2t3#
多年来,scalatest的MockitoSugar特征从scalatest移到了mockito。
在我的情况下,我有一个多继承问题,我的测试类直接使用org.mockito.scalatest.MockitoSugar,另一个扩展trait使用了旧的org.scalatest.mockito.MockitoSugar
如果您将所有现有的org.scalatest.mockito.MockitoSugar导入替换为org.mockito.scalatest.MockitoSugar,则此问题将消失。
zfycwa2u4#
这也可能意味着你注册了不止一个版本的scalatest。
qnakjoqk5#
我刚刚遇到了同样的问题,正如阿列克谢所描述的,(他应该得到支持,但我没有足够的声誉来支持或评论-谢谢Alexey),这似乎是由于我的项目中有多个版本的scalatest造成的,我可以通过从引入它的库中专门排除旧的scalatest来修复它(请注意,exclude需要指定scala的二进制版本,例如_2.11等!):
字符串
在排除之前,事件日志中也有一个警告:
型
v1l68za46#
我认为您的IntelliJ缺少库
scalatest
从IntelliJ,转到
Project Structure
->Project Settings
->Libraries
->+
符号->From Maven
->搜索正确版本的scalatest
在为IntelliJ添加
scalatest
库之后,assert
错误应该消失。这不是一个有保证的解决方案,只是给予它一个尝试:)
oo7oh9g97#
有时候,Intellij IDEA编译scala的方式和sbt编译scala的方式之间存在不兼容的地方。你可以尝试让IDEA编译为sbt,而不是默认编译。
在sbt视图中,您需要打开sbt设置。
一旦它被打开,你可以启用“buildings”复选框。正如IDEA所指出的,它被推荐用于导致IDEA编译无法正常工作的sbt构建配置。