【问题标题】:Error on scalatest compilation in IDEAIDEA中scalatest编译错误
【发布时间】:2020-07-31 17:56:45
【问题描述】:

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

【问题讨论】:

  • 检查过使用的sdk IDEA吗?
  • 是的。 scala-sdk-2.11.8 似乎还可以。
  • 问题是否仍然存在?你用的是什么版本的 IDEA 和 Scala 插件?

标签: scala intellij-idea sbt


【解决方案1】:

这也可能意味着您注册了多个版本的 scalatest。我遇到了与断言上的编译时错误完全相同的问题

【讨论】:

  • 使用dependencyOverrides += "org.scalatest" %% "scalatest" % "3.0.1" 解决了这个问题。很奇怪:我的 sbt 构建成功了,但是 IDEA 构建失败了——即使我在 IDEA 中打开了这个项目作为一个 sbt 项目。
  • 只是补充一点,当您注册了多个版本的 Scala 时,也会发生这种情况。使用 Gradle,我不得不告诉我的项目将 org.scala-lang:scala-library 排除在下游项目之外。
【解决方案2】:

我刚刚遇到了同样的问题,正如 Alexey 所描述的(他应该得到支持,但我没有足够的声誉来支持或评论 - 谢谢 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)

【讨论】:

    【解决方案3】:

    我认为您的 IntelliJ 缺少库 scalatest

    从 IntelliJ,转到 Project Structure -> Project Settings -> Libraries -> + 符号 -> From Maven -> 搜索具有正确版本的 scalatest

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

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

          相反,我排除了org.scalactic

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

          【讨论】:

            【解决方案7】:

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

            "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"
            

            【讨论】:

            • 将测试库带入编译范围是一个糟糕的主意。
            • 这是一条旧评论。我同意 Azuaron。
            猜你喜欢
            • 2016-08-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-06-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多