ang*_*era 14 scala intellij-idea scalatest scalactic
我有这个代码100%来自sbt,执行sbt test但在Intellij Idea中抛出一个编译错误.
import org.scalatest.{BeforeAndAfter, FunSuite, GivenWhenThen}
class SimpleTest extends FunSuite with GivenWhenThen with BeforeAndAfter {
test("Simple Test") {
Given("Why this error?")
assert("ok" === "ok")
}
}
Run Code Online (Sandbox Code Playgroud)
错误是:
Error:(5, 10) could not find implicit value for parameter pos: org.scalactic.source.Position
Given("Why this error?")
Error:(5, 10) not enough arguments for method Given: (implicit pos: org.scalactic.source.Position)Unit.
Unspecified value parameter pos.
Given("Why this error?")
Error:(6, 11) could not find implicit value for parameter prettifier: org.scalactic.Prettifier
assert("ok" === "ok")
Error:(6, 11) macro applications do not support named and/or default arguments
assert("ok" === "ok")
Error:(6, 11) not enough arguments for macro method assert: (implicit prettifier: org.scalactic.Prettifier, implicit pos: org.scalactic.source.Position)org.scalatest.Assertion.
Unspecified value parameters prettifier, pos.
assert("ok" === "ok")
Error:(4, 23) could not find implicit value for parameter pos: org.scalactic.source.Position
test("Simple Test") {
Run Code Online (Sandbox Code Playgroud)
按照建议刷新并重新加载后:
Error:(6, 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("ok" === "ok")
Run Code Online (Sandbox Code Playgroud)
我在用:
IntelliJ IDEA 2016.3.2
Build #IU-163.10154.41, built on December 21, 2016
scalaVersion := "2.11.0",
"org.scalactic" %% "scalactic" % "3.0.1" % "test",
"org.scalatest" %% "scalatest" % "3.0.1" % "test"
Run Code Online (Sandbox Code Playgroud)
注意: - 使用File -> Invalidate Caches / Restart不能解决问题 - 重现错误的示例:Github中的示例
ang*_*era 11
响应底部的变通方法.;)
此问题与此BUG列表有关:
问题是项目中存在依赖关系,使用测试范围,其他版本的scalatest和scalactic.
IntelliJ Idea混合编译范围和测试范围,但SBT正常工作.IntelliJ Idea团队在BUG中表示他们正在为此工作.
目前,我的解决方法已经转移到其他库用于测试的旧版本.
@ justin-kaeser被分配并正在努力解决这个问题.谢谢!
在最新的预览中,Scala插件有很多改进.
重现错误的示例:https://github.com/angelcervera/idea-dependencies-bug
有些依赖项可能在编译范围内包含不兼容的Scalactic或Scalatest版本,这些版本也包含在测试范围内.
您可以在Project Settings/Modules/Dependencies选项卡下的Project Structure中进行检查,并使用sbt-dependency-graph插件更仔细地分析它.
但是,SBT会执行IntelliJ不会(发布)的依赖性驱逐,这会在从IDE进行编译时导致其他问题.如果sbt-dependency-graph显示冲突的版本被逐出,那么它可能就是这个问题的一个实例.
解决方法:当您发现有问题的传递依赖项时,请将其从build.sbt中的根依赖项中排除.例如:
"org.apache.spark" %% "spark-core" % "2.1.0" % "provided" exclude("org.scalatest", "scalatest_2.11")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4741 次 |
| 最近记录: |