Travis Brown
Travis Brown

Reputation: 139028

Using a 2.10-only SBT plugin in a project that's cross-built against 2.9

Suppose I've got a SBT 0.13 project that's cross-built against Scala 2.9.3 and 2.10.4. I want to use an SBT plugin (sbt-coveralls) for the 2.10 build only, because the plugin isn't available for 2.9.

I know that I could use CrossVersion to conditionally add the plugin settings to the 2.10 build, but that doesn't help with the fact that addSbtPlugin isn't going to find anything for the 2.9 build, etc.

I'm assuming this is impossible (short of some really messy ad-hoc shell scripting) but I'm not an SBT wizard, and it would be nice to be surprised by the mysteries of SBT in a good way for once.

Upvotes: 2

Views: 844

Answers (2)

Tomer Gabel
Tomer Gabel

Reputation: 4112

Found this horrible hack of a workaround, but it does seem to work:

resolvers <++= scalaVersion {
  case v if v startsWith( "2.12" ) =>
    Seq.empty

  case _ =>
    addSbtPlugin( "org.scoverage" % "sbt-scoverage" % "1.0.4" )
    addSbtPlugin( "org.scoverage" % "sbt-coveralls" % "1.0.0" )
    Seq( Classpaths.sbtPluginReleases )
}

Upvotes: 4

Jacek Laskowski
Jacek Laskowski

Reputation: 74599

I might misunderstand the question, but I think you may be confused with sbt's vs a project's versions of Scala.

You cannot use a plugin that's incompatible with sbt - the runtime. If a plugin doesn't support the version of Scala sbt uses under the covers the plugin is deemed incompatible and hence sbt will refuse starting up. sbt 0.13.5 uses 2.10.4 so the plugins can only use Scala API 2.10.4. That's why addSbtPlugin offers no %%.

For projects, it's different. Here you could use whatever version you want regardless of the version sbt uses and hence the plugins. Once you've addSbtPlugin'ed a plugin, the plugin's available in a project, and to enable it, add the settings to projects.

Upvotes: 3

Related Questions