1

我有一个使用 1 个插件和 3 个依赖项的 sbt 构建文件:

scalaVersion := "2.10.4"

val reflect = Def.setting { "org.scala-lang" % "scala-reflect" % "2.10.4" }

val compiler = Def.setting { "org.scala-lang" % "scala-compiler" % "2.10.4" }

lazy val macrosSettings = Project.defaultSettings ++ Seq(
addCompilerPlugin("org.scala-lang.plugins" % "macro-paradise_2.10.4-SNAPSHOT" % "2.0.0-SNAPSHOT"),
libraryDependencies ++= {
  import Dependencies._
  Seq(play_json, specs2, reflect.value)
}
)

lazy val Macros = Project(id="IScala-Macros", base=file("macros"), settings=macrosSettings)

但是编译器在编译 IScala-Macros 时给了我以下错误:

[warn]  :: org.scala-lang#scala-compiler;2.10.4-SNAPSHOT: not found
[warn]  :: org.scala-lang#scala-library;2.10.4-SNAPSHOT: not found
[warn]  :: org.scala-lang#scala-reflect;2.10.4-SNAPSHOT: not found

这似乎是一个错误,因为我不希望它们解析为 2.10.4-SNAPSHOT,但只有 2.10.4,它是 sbt 的错误吗?如果不是,这个 SNAPSHOT 是从哪里来的?

4

1 回答 1

1

build.sbt此构建定义中有几个问题,因此我强烈建议您阅读文档Macro Paradise,您可以在其中找到指向端到端示例的项目的链接,但简而言之,使用宏天堂就像将以下两行添加到您的构建中(假设您已经设置 SBT 以使用宏)。

至于这个版本中的问题,我看不出依赖和的原因Def.settingreflect而且compiler我不确定addCompilerPlugin. 使用以下Def.setting用于引用scalaVersion设置值的位置。我仍然认为addCompilerPlugin应该遵循上面的示例项目。

import Dependencies._

scalaVersion := "2.10.4"

val reflect = Def.setting {
  "org.scala-lang" % "scala-reflect" % scalaVersion.value
}

val compiler = Def.setting {
  "org.scala-lang" % "scala-compiler" % scalaVersion.value
}

lazy val macrosSettings = Project.defaultSettings ++ Seq(
  addCompilerPlugin("org.scala-lang.plugins" % "macro-paradise_2.10.4-SNAPSHOT" % "2.0.0-SNAPSHOT"),
  libraryDependencies ++= Seq(
    play_json,
    specs2,
    reflect.value
  )
)

lazy val Macros = Project(id="IScala-Macros", base=file("macros"), settings=macrosSettings)
于 2014-07-19T19:33:42.767 回答