我正在尝试学习Scala,Scalatest和SBT的基础知识,我正在关注一个教程。这是我的built.sbt
文件:
name := "demo-hello"
version := "0.1"
scalaVersion := "2.12.6"
libraryDependencies += "org.scalatest" % "scalatest_2.10" % "2.1.0" % "test"
我有一个看起来像这样的测试(表明这是不必要的:
package demo
import org.scalatest.FunSuite
class HelloTest extends FunSuite {
test("say hello method works correctly") {
val hello = new Hello
assert(hello.sayHello("Scala") == "Hello, Scala!")
}
}
我该怎么办?我正在尝试运行测试,但我会收到此错误:
Error:(8, 36) can't expand macros compiled by previous versions of Scala
assert(hello.sayHello("Scala") == "Hello, Scala!")
我对%
符号BTW并不那么熟悉。
fix
我将build.sbt
更改为:
name := "demo-hello"
version := "0.1"
scalaVersion := "2.10"
libraryDependencies += "org.scalatest" % "scalatest_2.10" % "2.1.0" % "test"
剩下的问题:
- 因此,似乎正在降级到Scalaversion" 2.10"。为什么?
- 什么是工件?
scalatest
显然是人工制品? - 在我的机器上,鳞片2.10在哪里?看来我只有Scala 2.12。我的项目文件夹中的何处是版本2.10?
稍微不顺序回答您的问题:
2-"工件"是由Maven,SBT或其他构建系统构建的。对于Scala或Java,这几乎总是一个JAR文件。libraryDependencies
中的每个项目都在Maven存储库中指定一个文件(伪像的数据库(。
1- Scala类文件在scala的次要版本之间不兼容。当您从Maven存储库下载Scala Jar时,将Scala版本指定为文物名称的一部分。依赖关系中的_2.10
声明您希望使用Scala 2.10编译的scalatest
版本 - 这就是为什么您在Scala 2.12应用程序中使用它遇到错误的原因。
在SBT中声明对Scala伪像的依赖关系时,您应始终使用%%
操作员,该操作员会自动将适当的后缀附加到您的伪像,例如:
// This works for any scalaVersion setting.
libraryDependencies += "org.scalatest" %% "scalatest" % "2.1.0" % "test"
3 -sbt
处理自动下载Scala版本的适当运行时文件。