IDEA中的scalatest编译错误

IDEA中的scalatest编译错误,scala,intellij-idea,sbt,Scala,Intellij Idea,Sbt,我正在尝试编译包含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;Ljav

我正在尝试编译包含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)
      ^

我认为您的IntelliJ缺少库
scalatest

在IntelliJ中,从Maven转到
项目结构
->
项目设置
->
->
+
符号->
,搜索版本正确的
缩放测试

添加IntelliJ的
scalatest
库后,
assert
错误应消失


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

这也可能意味着您注册了多个scalatest版本。我在assert上遇到了与编译时错误几乎相同的问题,我只是遇到了相同的问题,正如Alexey所描述的(他应该获得升级投票权,但我没有足够的声誉来升级投票或发表评论-谢谢Alexey),这似乎是由于我的项目中有多个版本的scalatest造成的。我可以通过从引入它的库中专门排除较旧的scalatest来修复它(请注意,排除需要指定scala二进制版本,例如_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)

对我来说,这个问题是通过改变

"org.scalactic" %% "scalactic" % "3.0.1",
"org.scalatest" %% "scalatest" % "3.0.1" % test


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

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

标度2.11
org.scalatic

我有一个类似的问题,但排除了
org.scalatest
并没有解决它

相反,我排除了
org.scalatic

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

有时,Intellij IDEA编译scala的方式与sbt编译scala的方式之间存在不兼容。您可以试着做的是,让IDEA编译为sbt,而不是默认情况下的编译

在sbt视图中,您需要打开sbt设置。

打开后,您可以启用“构建”复选框。正如IDEA所述,对于导致IDEA编译无法正常工作的sbt构建配置,建议使用IDEA。

是否检查了使用的sdk理念?是<代码>scala-sdk-2.11.8
似乎还可以。问题是否仍然存在?您正在使用哪个版本的IDEA和Scala插件?使用
dependencyOverrides+=“org.scalatest”%%“scalatest”%%“3.0.1”
修复此问题。这很奇怪:我的sbt构建成功了,但是IDEA构建失败了——尽管我在IDEA中以sbt项目的形式打开了这个项目。我想补充一点,当您注册了多个版本的Scala时,这种情况也会发生。使用Gradle,我不得不告诉我的项目将
org.scala lang:scala library
从下游项目中排除。将测试库引入编译范围是一个糟糕的想法。这是一个老评论。我同意阿祖隆的观点。
"org.scalactic" %% "scalactic" % "3.0.1",
"org.scalatest" %% "scalatest" % "3.0.1"
<exclusion>
  <artifactId>scalactic_2.11</artifactId>
  <groupId>org.scalactic</groupId>
</exclusion>
"com.stackoverflow" %% "troublesome-library" % "1.0.420" excludeAll(ExclusionRule(organization="org.scalactic"))