25

我正在使用 Scala 2.11.1 和 sbt 0.13.5。

我有一个 sbt 插件,其中包含一个辅助函数来创建输入任务,如下所示(实现被剥离,因为它与问题无关):

def register(name: String, description: String): Def.Setting[InputTask[Unit]] = {
    InputKey[Unit](name, description) <<= Def.inputTask { 
        println("test")
    }
}

此函数在 Scala 2.10.4 中编译和工作得很好,但是一旦我切换到 2.11.1,它就会失败并出现以下错误:

无法扩展以前版本的 Scala 编译的宏

宏是Def.inputTask在 Scala 2.11.1 中简单地破坏了,还是我错过了一些明显的细节?

现在,上面的函数驻留在可以想象的最简单的 sbt 插件中。也完全没有依赖关系。

4

4 回答 4

31

sbt 0.13.x 系列在加载时使用 Scala 2.10.x,因此 sbt 0.13.x 本身必须针对 Scala 2.10 进行编译,所有 0.13.x 的 sbt 插件也是如此。

注意:sbt 0.13 可以使用 2.11.x 定义 Scala 项目。

于 2014-06-09T15:10:50.570 回答
16

如果您运行的是 scala 2.11.x,请在 build.sbt 文件中使用这一行。

libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.4" % "test"

于 2015-05-12T23:47:38.283 回答
-1

这是我刚刚尝试过的,它适用于scalaVersion代码2.11.6
已在github上签入,以防您想检查

我的sbt版本为

$ sbt --version
sbt launcher version 0.13.8

我的项目设置看起来像

object LearningScalaBuild extends Build {
  lazy val commonSettings = Seq(
    organization := "com.learner",
    version := "0.1.0",
    scalaVersion := "2.11.6",
    libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.4" % "test"
  )

  lazy val root = project.in(file(".")).aggregate(s99, ahka)
  lazy val s99 = project.in(file("s99"))
  .settings(commonSettings: _*)

  lazy val ahka = project.in(file("ahka"))
    .settings(commonSettings: _*)
    .settings(libraryDependencies += "com.typesafe.akka" %% "akka-actor" % "2.3.9")
}

我运行它Travis CI,它似乎运行良好

[info] Resolving org.scalatest#scalatest_2.11;2.2.4 ...
[info] Resolving org.scala-lang#scala-reflect;2.11.2 ...
[info] Resolving org.scala-lang.modules#scala-xml_2.11;1.0.2 ...
[info] Resolving org.scala-lang#scala-compiler;2.11.6 ...
[info] Resolving org.scala-lang#scala-reflect;2.11.6 ...
[info] Resolving org.scala-lang.modules#scala-xml_2.11;1.0.3 ...
[info] Resolving org.scala-lang.modules#scala-parser-combinators_2.11;1.0.3 ...
[info] Resolving jline#jline;2.12.1 ...
[info] downloading https://repo1.maven.org/maven2/com/typesafe/akka/akka-actor_2.11/2.3.9/akka-actor_2.11-2.3.9.jar ...
[info]  [SUCCESSFUL ] com.typesafe.akka#akka-actor_2.11;2.3.9!akka-actor_2.11.jar (253ms)
[info] downloading https://repo1.maven.org/maven2/com/typesafe/config/1.2.1/config-1.2.1.jar ...
[info]  [SUCCESSFUL ] com.typesafe#config;1.2.1!config.jar(bundle) (170ms)
[info] Done updating.
[info] 'compiler-interface' not yet compiled for Scala 2.11.6. Compiling...
[info] Run completed in 13 milliseconds.
[info] Total number of tests run: 0
[info] Suites: completed 0, aborted 0
[info] Tests: succeeded 0, failed 0, canceled 0, ignored 0, pending 0
[info] No tests were executed.
[info]   Compilation completed in 18.159 s
[info] Compiling 1 Scala source to /home/travis/build/hhimanshu/learningScala/s99/target/scala-2.11/test-classes...
[info] P01Spec:
[info] [Dummy Test] A List
[info] - must return true when provided empty list
[info] Run completed in 259 milliseconds.
[info] Total number of tests run: 1
[info] Suites: completed 1, aborted 0
[info] Tests: succeeded 1, failed 0, canceled 0, ignored 0, pending 0
[info] All tests passed.
[success] Total time: 28 s, completed May 30, 2015 3:41:26 AM
The command "sbt ++2.11.6 test" exited with 0.
Done. Your build exited with 0.
于 2015-05-30T03:45:18.577 回答
-2

我更改了 build.sbt 文件。现在它为我工作。下面是变化

scalaVersion := "2.11.6"

scalacOptions += "-deprecation"

libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.4" % "test"

于 2015-07-23T06:42:00.950 回答