为什么sbt使用不正确的版本号来声明依赖项?

时间:2014-07-19 18:43:41

标签: scala sbt scala-macro-paradise

我有一个使用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来自哪里?

1 个答案:

答案 0 :(得分:1)

build.sbt构建定义中存在一些问题,因此我强烈建议您阅读文档Macro Paradise,在那里您可以找到the link to a project 的端到端例如,但简而言之,使用宏天堂就像在构建中添加以下两行一样简单(授予您已经设置SBT以使用宏)。

对于此版本中的问题,我没有看到Def.setting对于depdendencies reflectcompiler的原因,而且我不确定addCompilerPlugin中的依赖关系{ {1}}。使用下面的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)