tribbloid
tribbloid

Reputation: 3838

Why is sbt using incorrect version number for declared dependencies?

I have a sbt build file that use 1 plugin and 3 dependencies:

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)

However the compiler gave me the following error in compiling 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

this seems like a bug as I don't want them to resolve to 2.10.4-SNAPSHOT, but only 2.10.4, is it a bug of sbt? If not, where does this SNAPSHOT come from?

Upvotes: 1

Views: 830

Answers (1)

Jacek Laskowski
Jacek Laskowski

Reputation: 74669

There are a couple of issues in this build.sbt build definition so I highly recommend reading the document Macro Paradise where you can find the link to a project that for an end-to-end example, but in a nutshell working with macro paradise is as easy as adding the following two lines to your build (granted you’ve already set up SBT to use macros).

As to the issues in this build, I don't see a reason for Def.setting for the depdendencies reflect and compiler, and moreover I'm unsure about the dependency in addCompilerPlugin. Use the one below where Def.setting is used to refer to the value of the scalaVersion setting. I still think addCompilerPlugin should follow the sample project above.

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)

Upvotes: 1

Related Questions