【问题标题】:Why doesn't the Def.inputTask macro work in Scala 2.11.1?为什么 Def.inputTask 宏在 Scala 2.11.1 中不起作用?
【发布时间】:2014-07-28 23:25:27
【问题描述】:

我正在使用 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 插件中。也完全没有依赖关系。

【问题讨论】:

    标签: scala sbt scala-2.11


    【解决方案1】:

    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 项目。

    【讨论】:

    • 在您的 build.sbt 文件中,确保您使用 scalaVersion := "2.10.4" 而不是 scalaVersion := "2.11.x" 之类的东西
    • 为什么 intellij 会让我用 SBT 0.13.8 和 scala 2.11.6 创建一个项目?
    • @FlorianF 特别是 sbt plugins 必须使用 2.10,而不是所有项目。
    • 我可能需要交叉 t 才能看到因果关系。是不是 sbt 本身不使用 2.11 进行编译,因此尝试在 2.11 项目中使用其符号会退回到尝试 2.10 sbt 宏代码,但会因错误而失败?
    【解决方案2】:

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

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

    【讨论】:

    • 为什么有人赞成这个?这 nothing 与问题无关。这完全无关紧要。
    • Rodrigo 正在解决将 Scala 2.11.x 与 scalatest_2.10 一起使用时导致的类似错误消息。有趣的是,谷歌搜索错误消息让我想到了这个问题,但罗德里戈的回答解决了我的问题。谢谢罗德里戈! (可能需要编辑您的答案,以说明您的答案适用于搜索此错误消息的新手)。
    • 然而它仍然与这个问题无关。
    • @m-z 在 maven 上搜索 Scala 测试库会在第一页显示 scalatest_2.10。也许每个人都添加了那个然后想知道他们为什么会遇到这个问题。
    • @AlfredFazio 是对的。此外,Rodrigo 修复了与此问题无关的问题,但非常有帮助。
    【解决方案3】:

    这是我刚刚尝试过的,它适用于 scalaVersion2.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"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-22
        • 2019-09-26
        • 1970-01-01
        • 1970-01-01
        • 2022-12-04
        • 2018-09-03
        • 1970-01-01
        • 2014-11-02
        相关资源
        最近更新 更多