IDEA中的scalatest编译出错

时间:2016-10-01 22:27:27

标签: 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;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 个答案:

答案 0 :(得分:15)

这也可能意味着您注册了多个版本的scalatest。我遇到了与assert

上的编译时错误相同的问题

答案 1 :(得分:15)

我遇到了同样的问题,正如Alexey所描述的那样(他应该获得upvote但我没有足够的声誉来支持或评论 - 谢谢Alexey),这似乎是由于有多个版本的scalatest在我的项目中。我能够通过专门从引入它的库中排除旧的scalatest来修复它(请注意,排除需要指定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)

答案 2 :(得分:1)

我认为您的IntelliJ缺少库Invoke-Item : Cannot find path 'C:\dev\testfiles MOCK_DATA_XCL.xlsx\' because it does not exist

来自IntelliJ的

,转到scalatest - &gt; Project Structure - &gt; Project Settings - &gt; Libraries符号 - &gt; + - &gt;使用正确的版本搜索From Maven

为IntelliJ添加scalatest库后,scalatest错误应该消失。

这不是一个有保证的解决方案,只需试一试:)

答案 3 :(得分:0)

对我来说,通过更改

解决了这个问题
"org.scalactic" %% "scalactic" % "3.0.1",
"org.scalatest" %% "scalatest" % "3.0.1" % test

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

答案 4 :(得分:0)

仅排除org.scalatest组对我不起作用。在分析我的mvn依赖关系时,我还必须排除scalactic_ {scala_binary_version}组。

var arr = ['abc','def','ghi'];
arr = arr.map(value => ({value}));
console.log(arr);

答案 5 :(得分:0)

我遇到了类似的问题,但是排除org.scalatest并不能解决问题。

相反,我排除了org.scalactic

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

答案 6 :(得分:0)

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

在sbt视图中,您需要打开sbt设置。 enter image description here

打开后,您可以启用“构建”复选框。如IDEA所述,建议使用sbt构建配置,以免IDEA中的编译无法正常工作。 enter image description here