Подтвердить что ты не робот

Почему макрос Def.inputTask не работает в Scala 2.11.1?

Я использую 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, который только можно себе представить. Также нет зависимостей.

4b9b3361

Ответ 1

sbt 0.13.x использует Scala 2.10.x, когда он загружается, поэтому сам sbt 0.13.x должен быть скомпилирован против Scala 2.10, и поэтому все sbt-плагины для 0.13.x.

Примечание: sbt 0.13 может определять проекты Scala, используя 2.11.x.

Ответ 2

Если вы используете scala 2.11.x, используйте эту строку в файле build.sbt.

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

Ответ 3

Это то, что я только что пробовал, и работает с scalaVersion of 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.

Ответ 4

Я изменил файл build.sbt. Теперь он работает на меня. Ниже приведено изменение

scalaVersion: = "2.11.6"

scalacOptions + = "-deprecation"

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